mvvmcross windows存储collectionviewsource错误

时间:2013-12-03 22:09:00

标签: c# data-binding windows-store-apps winrt-xaml mvvmcross

当我尝试为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();
        }
    }
}

Updated1

非常感谢!它真的对我有用!

但是现在,我遇到了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;            
}

提前致谢!

1 个答案:

答案 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;
    }
}