1

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

<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 添加一个字符串,但是当我单击按钮时,我得到了Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

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

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

在这种情况下, ListView 没有更新,当我触摸它时,我得到Value does not fall in the exception range 0x80070057

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

4

1 回答 1

2

通过您的 ViewModel 进行添加,而不是在 ListView 本身上添加,因此您的代码已死在:

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

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

    ObservableCollection<string> names;

    private void FillListView()
    {
        names = new ObservableCollection<string>();
        names.Add("Foo");
        MyList.DataContext = names;
    }
于 2013-01-27T19:08:19.827 回答