如何在WPF中检测UI中DataGrid的项源更改?

3
我有一个数据表格,它绑定到我视图模型中的一个可观察集合。
项源属性设置为该集合。
每次我通过另一个按钮更新集合时,我的数据表格视图会更新,我能够看到更改。
我希望确保至少始终选择WPF数据表格中的一项。
我尝试在Datagrid XAML中使Selected Index =0,但这仅适用于最初加载的数据表格。当项源集合更改时,它不会将选定的索引重置为0。更改是指重置整个集合(而不是添加或删除单个项)。
基本上,我需要一个从WPF触发的事件,每当项源集合被重置时就会触发。
不确定此处是否有任何有用的代码。

这可能是 https://dev59.com/I2gv5IYBdhLWcg3wSe-2 的重复。 - David Zech
2个回答

3
你可以在视图模型上订阅 PropertyChanged 事件,并查看事件参数以查看属性名称是否与你的 DataGridItemsSource 名称匹配。你还需要确保在视图模型中触发该事件(你可能已经这样做了,因为你的 datagrid 显示了更改)。
你可以在视图的代码后台中完成此操作,或者更好的方法是在 附加属性 中完成。

1

有两种类型的事件可以订阅,因为您正在使用MVVM,其中集合在VM上,以下是策略...

单个更改

在代码后台中的View中,订阅ObservableCollectionCollectionChanged event。当集合更改时,事件将被触发,您可以根据发生的操作类型指定要选择的网格索引。

集合更改

对于整个集合更改,还从View订阅VM的InotifyProperty更改事件,并执行与提到的相同逻辑以设置选择网格上的特定项目。


可观察的集合不在我的代码后台中,而是在视图模型中。 - Ace McCloud
你的意思是项源属性中的OC吗? - Ace McCloud
我不想改变集合。我只想在设置整个ItemsSource时进行操作,而不是添加单个项。 - Ace McCloud
@PrasaanthNeelakandan,我更新了帖子。ObservableCollection在ViewModel上。你的视图应该可以访问视图模型,对吧? - ΩmegaMan

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