我是MVVM的新手,我被卡住了......
我在MainWindow中有一个ListBox。 ListBox包含DataTemplates显示的WhatEverViewModel类型的项。用户可以与这些项进行交互,而WhatEverViewModel有几个DependencyProperties,它们可能会在交互过程中发生变化。
我的问题是: 我如何优雅地(在MainWindowViewModel中)对CURRENTLY SELECTED WhatEverViewModel的DependencyProperties的更改作出反应。我个人会在WhatEverViewModel中实现一些事件,当ListBox的SelectedItem发生变化时,我会附加到当前所选WhatEverViewModel的事件。但我认为在MVVM中可能有更优雅的方法来解决这个问题......
谢谢。
答案 0 :(得分:2)
使CurrentWhatEver
成为MainWindowViewModel
的属性并绑定Listbox.SelectedItem
属性。这样,MainWindowViewModel
知道所选择的WhatEver何时发生变化,并且可以注册/取消注册它感兴趣的事件。
答案 1 :(得分:2)
viewmodel之间的通信可以通过多种方式完成。
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的属性更改。
如需更多指导,请阅读: