向ListView添加项目会引发灾难性故障异常

时间:2013-01-27 18:51:27

标签: data-binding windows-8 windows-runtime

我有这个列表视图和一个按钮:

<ListView x:Name="MyList" ItemsSource="{Binding}" Grid.Row="1"></ListView>
<Button x:Name="Add" Content="Add Item" Click="Add_Click" Grid.Row="2" />

我初始化一个字符串列表并将其分配给ListView:

List<string> names;

private void FillListView()
{
    names = new List<string>();
    names.Add("Foo");
    MyList.DataContext = names;
}

private void Add_Click(object sender, RoutedEventArgs e)
{
    MyList.Items.Add("Bar");
}

还有一个处理程序可以向ListView添加一个字符串,但是当我单击该按钮时,我得到灾难性故障(HRESULT异常:0x8000FFFF(E_UNEXPECTED))

我还尝试将新字符串直接添加到集合中,如下所示:

private void Add_Click(object sender, RoutedEventArgs e)
{
    names.Add("Bar");
}

在这种情况下,ListView不会更新,当我触摸它时,我得到值不属于异常范围0x80070057

如何将集合绑定到ListView然后添加更多项?

1 个答案:

答案 0 :(得分:2)

通过ViewModel进行添加,而不是在ListView本身上添加,所以这里的代码已经死了:

private void Add_Click(object sender, RoutedEventArgs e)
{
    names.Add("Bar");
}

您只需要将names的类型从列表更改为ObservableCollection,以便在添加/删除项目时,通知绑定引擎并反映UI中的更改。

    ObservableCollection<string> names;

    private void FillListView()
    {
        names = new ObservableCollection<string>();
        names.Add("Foo");
        MyList.DataContext = names;
    }