MVVM SelectedItem.Property OnChanged

时间:2012-04-26 09:32:31

标签: c# wpf xaml mvvm

我是MVVM的新手,我被卡住了......

我在MainWindow中有一个ListBox。 ListBox包含DataTemplates显示的WhatEverViewModel类型的项。用户可以与这些项进行交互,而WhatEverViewModel有几个DependencyProperties,它们可能会在交互过程中发生变化。

我的问题是: 我如何优雅地(在MainWindowViewModel中)对CURRENTLY SELECTED WhatEverViewModel的DependencyProperties的更改作出反应。我个人会在WhatEverViewModel中实现一些事件,当ListBox的SelectedItem发生变化时,我会附加到当前所选WhatEverViewModel的事件。但我认为在MVVM中可能有更优雅的方法来解决这个问题......

谢谢。

3 个答案:

答案 0 :(得分:2)

使CurrentWhatEver成为MainWindowViewModel的属性并绑定Listbox.SelectedItem属性。这样,MainWindowViewModel知道所选择的WhatEver何时发生变化,并且可以注册/取消注册它感兴趣的事件。

答案 1 :(得分:2)

viewmodel之间的通信可以通过多种方式完成。

  • Messenger / Mediator,如MVVM Light
  • 类似PRISM
  • 的活动
  • 或者只是使用harcoupling并订阅mainviewmodel中WhatEverViewModel中的事件。

btw为什么你在Viewmodels中使用DependencyProperties?使用INotifyPropertyChanged的简单属性是可行的方法。

还有一件事。 为什么要对SelectedViewmodel中的更改做出反应(或者使用所选的viewmodel更好地实现您想要实现的目标。)?如果您只想在视图中显示某些信息,只需将SelectedViewmodel绑定到它即可。你应该以这种方式指明你的问题。

编辑

  

WhatEverViewModel有一个列表,它也绑定到一个列表框(在   datatemplate)并取决于我在WhatEverViewModel中选择的内容   我想在MainViewModel中显示某种“配置器”。 -   JensPfister1 1小时前

为什么不简单地将SelectedWhatEverViewmodel.SelectedListEntryProperty绑定到配置器视图?你能发一些代码吗?

答案 2 :(得分:0)

您应该在每个ViewModel上实现INotifyPropertyChanged接口。然后当您的某个属性更改调用PropertyChanged事件时,您的视图将收到属性已更改的通知(只要您的绑定正确)。如果属性是列表或集合,请确保该列表基于INotifyCollectionChanged

将Selected WhatEverViewModel的属性添加到MainWindowViewModel,将其绑定到ListBox中。然后在您的MainWindowViewModel中,您可以挂钩您选择的WhatEverViewModel的属性更改。

如需更多指导,请阅读: