当我尝试为ItemsSource
设置ListBox
(或为我的{{设置Source
时,我在Windows应用商店(或Win RT)应用中遇到mvvmcross的一个问题1}},用于过滤,排序和分组数据。)
当我为MyCollection
设置ItemsSource
时,我在这行代码中立即出现ListBox
错误:
null reference
我检查了ListBox.ItemsSource = ViewModel.Tasklist;
,它等于ViewModel
,我不知道为什么?
这看起来很奇怪,因为当我在XAML中使用此代码时,它工作正常,但我需要使用Null
:
collectionviewsource
下面的我的C#代码(WinRTTasks.Views.FirstView.xaml.cs):
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):
namespace TasksWinRT.Views
{
public sealed partial class FirstView : MvxStorePage
{
public new FirstViewModel ViewModel
{
get { return (FirstViewModel) base.ViewModel; }
set { base.ViewModel = value; }
}
public FirstView()
{
//ListBox.ItemsSource = ViewModel.Tasklist; //When I am adding this line, all the error occurred
this.InitializeComponent();
}
}
}
非常感谢!它真的对我有用!
但是现在,我遇到了XAML的新问题。 如果我使用这个代码一切正常,XAML会随时通过RaisePropertyChange更新我的List:
XAML(WinRTTasks.Views.FirstView.xaml):
<ListBox Name="ListBox" Height="208">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title }" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
此外,我可以通过按钮更新我的ListBox,就像这样,但我认为这不是一个好的解决方案,而且这不是我想要的使用mvvmcross:
XAML(WinRTTasks.Views.FirstView.xaml.cs):
<ListBox ItemsSource="{Binding Tasklist}" Height="208">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title }" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是当我使用这段代码时,我在更新ListBox中的项目方面遇到了问题, 因为我在启动应用程序后甚至看不到ListBox中的任何项目。
private void ApplyFilterButton2_Click(object sender, RoutedEventArgs e)
{
ViewModel.DoApplyFilter();
ListBox1.ItemsSource = ViewModel.Tasklist;
}
任务列表是ObservableCollection:
public FirstView()
{
this.InitializeComponent();
this.Loaded += FirstView_Loaded;
}
void FirstView_Loaded(object sender, RoutedEventArgs e)
{
ListBox1.ItemsSource = ViewModel.Tasklist;
}
提前致谢!
答案 0 :(得分:3)
看起来你在初始化之前访问“ListBox”(可能是'ViewModel')会给你空引用错误。通常你想添加一个'loaded'处理程序并在那里进行控制初始化。
试试这个:
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;
}
}