我遇到了DataGrid及其底层ObservableCollection的问题。我想以编程方式从集合中添加和删除行,并将结果显示在DataGrid中。虽然我希望这对我来说会自动发生,但事实并非如此。我发现如果我之后对数据进行排序,那么行将按我想要的那样显示。这是我的所作所为:
DataGrid的ItemsSource设置为我的ObservableCollection< T>。
用户点击按钮,触发ICommand,删除值为X的行。
用户看到的内容完全相同:没有删除任何行。
用户单击列标题可对DataGrid进行排序。现在删除了行。
这里发生了什么?我想删除的行,直到我对列进行排序。我也发现了别的东西。如果我刷新DataGrid.Items,则删除行。那段代码很简单:
this.dg.Items.Refresh(); //"dg" is my DataGrid
虽然这不是MVVM,但它确实有用。
答案 0 :(得分:3)
确保将直接绑定到ObservableCollection
,例如,您没有使用任何Linq运算符,将其包装在集合视图/代理等中。任何转换/集合中不会转发集合更改事件的包装器将阻止网格收到更改通知。