我有这个列表视图和一个按钮:
<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然后添加更多项?
答案 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;
}