Data binding 向ListView添加项会引发灾难性的失败异常

Data binding 向ListView添加项会引发灾难性的失败异常,data-binding,windows-8,windows-runtime,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不会更新,当我触摸它时,我得到的值不在异常范围0x80070057内 如何将集合绑定到ListView,

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

<ListView x:Name="MyList" ItemsSource="{Binding}" Grid.Row="1"></ListView>
<Button x:Name="Add" Content="Add Item" Click="Add_Click" Grid.Row="2" />
在这种情况下,ListView不会更新,当我触摸它时,我得到的值不在异常范围0x80070057


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

通过ViewModel进行添加,而不是在ListView本身上进行添加,因此您的代码在以下方面已经失效:

private void Add_Click(object sender, RoutedEventArgs e)
{
    names.Add("Bar");
}
您只需将
名称的类型从列表更改为,以便在添加/删除项目时,绑定引擎会收到通知,并反映UI中的更改

    ObservableCollection<string> names;

    private void FillListView()
    {
        names = new ObservableCollection<string>();
        names.Add("Foo");
        MyList.DataContext = names;
    }
observedcollection名称;
私有void FillListView()
{
名称=新的ObservableCollection();
名称。添加(“Foo”);
MyList.DataContext=名称;
}

像这样重命名按钮“btnAdd”我怀疑按钮名称可能会在编译器上产生混淆,这是行不通的,名称必须是公共属性,而且仅仅分配给datacontext也不起作用,您必须使用bindingit正常工作(我不会发布代码,除非我测试它或提供我没有尝试过的免责声明)。在这里,名称是页面的属性,不是最好的设计,但很明显OP只是习惯了MVVM模型、数据绑定等,所以重构似乎脱离了上下文。另外,它确实利用了问题中提供的XAML,我只是在回答中没有重复。names.Add(“foo”)起作用,有什么原因导致MyList.Items.Add(“Bar”)不起作用吗?MyList.Items.Add可以,但不能同时使用绑定,这有点道理,因为混合使用这两个选项,对于谁应该赢来说是不明确的。将datacontext/绑定设置为对控件设置“锁”,以使其他调整它的方法失败。如果在代码中向可视控件添加项,则可能是做错了:)对不起,我不知道更改后的通知在没有绑定的情况下可以工作。。。我被纠正了:)
private void Add_Click(object sender, RoutedEventArgs e)
{
    names.Add("Bar");
}
    ObservableCollection<string> names;

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