【问题标题】:Using commands to be notified that a collection has changed使用命令通知集合已更改
【发布时间】:2011-03-08 09:50:56
【问题描述】:

我想知道当集合发生变化时我是否有任何方法可以处理,然后向用户显示一条消息。

由于我使用 MVVM,我在视图项目中没有对模型的任何引用,所以我不能这样做

MyCollection col = InstanceOfViewModel.Read();

由于 View 对“MyCollection”一无所知,我不想在 if 中测试方法本身,就像上面的代码:

if(InstanceOfViewModel.Read().Count == 0)

所以我想到了命令。我已经在使用一个来处理我的保存和更新条件(而不是大量的 if)。但现在我被困住了。我不知道我应该做什么/使用原因,ObservableCollections 暴露了一个事件,CollectionChanged。

一种解决方案可能是:让视图模型订阅此事件,当它发生时,检查计数是否等于 0,如果为真,则向用户显示:“您的搜索未检索到任何行”或其他任何内容。但我不喜欢在视图模型、消息和任何类型的用户交互中使用 MESSAGEBOXES 我试图委托给视图

但我想知道我是否可以使用命令来完成,或者我是否在一个相对容易实现的事情上变得过于复杂。

等待答案并提前致谢!

【问题讨论】:

  • 我认为当你说“......我变得太复杂......”时,你应该相信你的直觉,这个集合首先是如何更新的?
  • Wonko,这个 ViewModel 公开了一个方法 Read,它使用模型类的实例,让我们调用 Employee。因此,每次我需要更新 EmployeeCollection 时,我都会使用 Employee 实例,该实例调用其特​​定 DAO 的 Read 方法,并返回 ObservableCollection EmployeeCollection = MyEmployeeInstance.Read();返回员工集合;就这样。所有模型都继承自一个通用接口,一种策略模式实现。但是,是的,有时我把事情弄得太复杂了。也许我应该订阅 CollectionChanged 并完成它。

标签: wpf mvvm command observablecollection


【解决方案1】:

如果您的集合在视图模型中并且您正在使用 onPropertyChanged...任何时候您的整个集合更改(而不是单个项目)它都会触发 onPropertychanged,您可以在 onPropertyChanged 方法中观察它...也许我不是了解你的代码结构...

【讨论】:

  • dep,是的,我的模型类实现了 INotifyPropertyChanged,但我没有注意到它也会触发整个集合本身。谢谢,我试试看。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2011-04-09
相关资源
最近更新 更多