【问题标题】:how to detect datagrid items source changed at the UI in WPF?如何检测 WPF 中 UI 上更改的数据网格项目源?
【发布时间】:2015-11-22 11:23:53
【问题描述】:

我有一个数据网格,它绑定到我的视图模型中的 Observable 集合。

项目源属性设置为集合。

每次我更新集合(通过另一个按钮)时,我的数据网格视图都会更新,我可以看到更改。

我想确保始终选择 WPF 数据网格中的至少一项。

我尝试在 Datagrid XAML 中设置 Selected Index =0 ,但这仅适用于最初加载的数据网格。当 Items 源集合更改时,它不会将选定的索引重置为 0。通过更改,我的意思是整个集合被重置(不是添加或删除单个项目)。

基本上我需要一个在 itemssource 集合被重置时从 WPF 触发的事件。

不确定这里是否有任何代码有帮助。

【问题讨论】:

标签: c# wpf xaml mvvm datagrid


【解决方案1】:

您可以在视图模型上订阅PropertyChanged 事件并查看事件参数以查看属性名称是否与您的DataGridItemsSource 的名称匹配。您还需要确保在视图模型中触发该事件(您可能是因为您的数据网格显示了更改)。

您可以在视图后面的代码中执行此操作,或者更好的是,在 attached property 中。

【讨论】:

    【解决方案2】:

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

    个别变化

    在后面的代码中查看,订阅ObservableCollectionCollectionChangedevent。当集合发生变化时,该事件将被触发,您可以根据发生的类型操作在网格上指定要选择的索引。

    收藏变更

    对于整个集合的更改,也可以从视图订阅 VM 的 InotifyProperty 更改事件,并执行与上述相同的逻辑来设置要选择的网格上的特定项目。

    【讨论】:

    • Observable 集合不在我的代码后面。它在视图模型中。
    • 你的意思是项目源属性中的 OC 吗?
    • 我不想改变收藏。我只想要设置整个 ItemsSoruce,而不是添加单个项目
    • @PrasaanthNeelakandan,我更新了帖子。可观察的集合位于 ViewModel 上。您的视图应该有权访问视图模型吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2012-05-30
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多