如何在WPF中动态绑定List<object>到DataGrid?

3
我希望您能动态地将列表绑定到数据网格上,以下代码可以第一次工作,如果再次点击添加,则不会在数据网格中填充。

截图

       private List<Item> PopulateItemList()
    {
        return itemLst;
    }
    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        Item item = new Item();
        item.Item1 = txtItem.Text;
        itemLst.Add(item);
        grdItem.ItemsSource = PopulateItemList();

    }
    private List<Item> itemLst = new List<Item>();

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        itemLst.Clear(); 

    }

感谢您。

2
+1 对于一张好的截图和一个仅包含相关部分的代码示例。 - Heinzi
2个回答

5

你应该使用ObservableCollection<T>而不是List<T>

ObservableCollection<T>实现了INotifyCollectionChanged,这将通知WPF何时添加或删除项目。


我本来也想打一个非常类似的回复。 - SQLMason
1
此外:ObservableCollection<T> 通知列表更改(添加、删除、移动),但不会通知 T 的更改。你需要让 T 实现 INotifyPropertyChanged 来实现这一点。 - Philippe Lavoie

1

你可以像Slaks建议的那样使用ObservableCollection。否则,在重新填充其他值之前,您必须首先将datagrid itemSource设置为null。 但我强烈建议您使用ObservableCollection,并在UserControl的构造函数中将其设置为datagrid的ItemSource,而不是再次设置它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接