C# mvvmcross windows应用商店集合ViewSource错误
当我试图为我的C# mvvmcross windows应用商店集合ViewSource错误,c#,data-binding,windows-store-apps,winrt-xaml,mvvmcross,C#,Data Binding,Windows Store Apps,Winrt Xaml,Mvvmcross,当我试图为我的列表框设置ItemsSource(或为我的MyCollection设置Source,这是筛选、排序和分组数据所必需的)时,Windows应用商店(或Win RT)应用程序中的mvvmcross有一个问题 当我为我的ListBox设置ItemsSource时,我立即在这行代码中得到一个null引用错误: ListBox.ItemsSource = ViewModel.Tasklist; 我检查了ViewModel,它等于Null,我不知道为什么 这似乎很奇怪,因为当我在XAML中使
列表框设置ItemsSource
(或为我的MyCollection设置Source
,这是筛选、排序和分组数据所必需的)时,Windows应用商店(或Win RT)应用程序中的mvvmcross有一个问题
当我为我的ListBox
设置ItemsSource
时,我立即在这行代码中得到一个null引用
错误:
ListBox.ItemsSource = ViewModel.Tasklist;
我检查了ViewModel
,它等于Null
,我不知道为什么
这似乎很奇怪,因为当我在XAML中使用这段代码时,它工作得很好,但我需要使用collectionviewsource
:
XAML (WinRTTasks.Views.FirstView.xaml):
<ListBox ItemsSource="{Binding Tasklist}" Height="208">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title }" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
XAML(WinRTTasks.Views.FirstView.XAML):
但是当我使用这段代码时,我在更新列表框中的项目时遇到了问题,
因为启动应用程序后,我甚至看不到列表框中的任何项目
public FirstView()
{
this.InitializeComponent();
this.Loaded += FirstView_Loaded;
}
void FirstView_Loaded(object sender, RoutedEventArgs e)
{
ListBox1.ItemsSource = ViewModel.Tasklist;
}
任务列表是可观察的集合:
private ObservableCollection<TasklistViewModel> _tasklist = new ObservableCollection<TasklistViewModel>();
public ObservableCollection<TasklistViewModel> Tasklist
{
get { return _tasklist; }
set
{
_tasklist = value;
RaisePropertyChanged(() => Tasklist);
}
}
private observedcollection\u tasklist=new observedcollection();
公共可观察收集任务列表
{
获取{return\u tasklist;}
设置
{
_任务列表=值;
RaisePropertyChanged(()=>任务列表);
}
}
提前谢谢 看起来您正在访问初始化前的“ListBox”(可能还有“ViewModel”),这将导致空引用错误。通常,您希望添加一个“已加载”的处理程序,并在其中进行控制初始化
试试这个:
public sealed partial class FirstView : MvxStorePage
{
public new FirstViewModel ViewModel
{
get { return (FirstViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
public FirstView()
{
this.InitializeComponent();
this.Loaded += FirstView_Loaded;
}
void FirstView_Loaded(object sender, RoutedEventArgs e)
{
ListBox.ItemsSource = ViewModel.Tasklist;
}
}
+1-在mvx中,viewmodel在第一次导航时加载,非常感谢!这对我来说真的很有用!但是现在,我在XAML上遇到了一个新问题。
private void ApplyFilterButton2_Click(object sender, RoutedEventArgs e)
{
ViewModel.DoApplyFilter();
ListBox1.ItemsSource = ViewModel.Tasklist;
}
public FirstView()
{
this.InitializeComponent();
this.Loaded += FirstView_Loaded;
}
void FirstView_Loaded(object sender, RoutedEventArgs e)
{
ListBox1.ItemsSource = ViewModel.Tasklist;
}
private ObservableCollection<TasklistViewModel> _tasklist = new ObservableCollection<TasklistViewModel>();
public ObservableCollection<TasklistViewModel> Tasklist
{
get { return _tasklist; }
set
{
_tasklist = value;
RaisePropertyChanged(() => Tasklist);
}
}
public sealed partial class FirstView : MvxStorePage
{
public new FirstViewModel ViewModel
{
get { return (FirstViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
public FirstView()
{
this.InitializeComponent();
this.Loaded += FirstView_Loaded;
}
void FirstView_Loaded(object sender, RoutedEventArgs e)
{
ListBox.ItemsSource = ViewModel.Tasklist;
}
}