为什么在更改ItemsSource时DataGrid不会更新?

Pou*_*yan 31 c# data-binding wpf datagrid itemsource

我的wpf应用程序中有一个datagrid,我有一个简单的问题.我有一个通用列表,我希望每次将对象添加到集合时将此集合绑定到我的数据网格数据源.我对使用可观察的集合不感兴趣.

关键是我在其他地方使用相同的方法,并且工作正常.但是这次当我按下Add按钮时,会添加一个对象并且datagrid会正确更新,但是从添加到集合datagrid的第二个项目不再更新.

这是代码:

 private void btnAddItem_Click(object sender, RoutedEventArgs e)
    {
        OrderDetailObjects.Add(new OrderDetailObject
        {
            Price = currentitem.Price.Value,
            Quantity = int.Parse(txtQuantity.Text),
            Title = currentitem.DisplayName,
            TotalPrice = currentitem.Price.Value * int.Parse(txtQuantity.Text)
        });

        dgOrderDetail.ItemsSource = OrderDetailObjects;
        dgOrderDetail.UpdateLayout();
    }
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

H.B*_*.B. 65

ItemsSource总是相同的,到您的收藏,没有任何变化,没有更新的参考.您可以在之前将其清空:

dgOrderDetail.ItemsSource = null;
dgOrderDetail.ItemsSource = OrderDetailObjects;
Run Code Online (Sandbox Code Playgroud)

或者,您也可以刷新项目:

dgOrderDetail.ItemsSource = OrderDetailObjects; //Preferably do this somewhere else, not in the add method.
dgOrderDetail.Items.Refresh();
Run Code Online (Sandbox Code Playgroud)

我不认为你真的想打电话给UpdateLayout那里......

(拒绝使用ObservableCollection并不是一个好主意)

  • 这是针对这种情况的解决方案,但它只是一个创可贴。真正的解决方案是使用“DataBinding”和“ObservableCollection”。周围有很多这样的例子。 (4认同)

Mat*_*att 14

我也发现了

dgOrderDetails.Items.Refresh();
Run Code Online (Sandbox Code Playgroud)

也会完成同样的行为.