MVVM SelectedItem.Property调用onChanged
我是新与MVVM和我被困...MVVM SelectedItem.Property调用onChanged
我在主窗口的列表框。 ListBox包含由DataTemplates显示的WhatEverViewModel类型的项目。用户可以与这些项目交互,并且WhatEverViewModel有几个DependencyProperties,这些DependencyProperties在交互过程中可能会改变。
我的问题是: 我怎样才能优雅反应(在MainWindowViewModel)到当前选定WhatEverViewModel的DependencyProperties的变化。我个人会在WhatEverViewModel中实现一些事件,并且当ListBox的SelectedItem发生变化时,我会附加到当前选定的WhatEverViewModel的事件。但我认为在MVVM中可能有更好的方法来解决这个问题...
谢谢。
让CurrentWhatEver
您MainWindowViewModel
的属性和Listbox.SelectedItem
属性绑定就可以了。这样一来,当所选的任何变化,并且可以注册/注销事件很感兴趣MainWindowViewModel
知道。
这就是我已经做的。因此,除了WhatEverViewModel中的一个事件通知重要属性更改时,没有其他解决方案? – JensPfister1 2012-04-26 09:51:04
也许你可以更详细地解释你的WhatEverViewModel发生了什么,以及你希望你的MainWindowViewModel如何反应。 – 2012-04-26 09:58:15
WhatEverViewModel有一个列表,它也绑定到一个列表框(在datatemplate中),并取决于我在WhatEverViewModel中选择的内容,我想在MainViewModel中显示某种“配置器”。 – JensPfister1 2012-04-26 10:57:34
您应该在每个ViewModel上实现INotifyPropertyChanged
接口。然后,当您的某个属性更改调用PropertyChanged
事件时,您的视图将收到属性已更改的通知(只要您的绑定正确)。如果属性是列表或集合,请确保该列表基于INotifyCollectionChanged
。
将选定的WhatEverViewModel属性添加到您的MainWindowViewModel,将其绑定到您的ListBox中。然后,在您的MainWindowViewModel中,您可以连接到Selected WhatEverViewModel的属性更改。
更多指导阅读:
@ JensPfister1想在MainViewModel中做出反应,而不是在View中做出反应。 – 2012-04-26 09:46:18
Woops,我误解了它。 – Kolky 2012-04-26 09:48:51
视图模型之间的通信可以通过多种方式来完成。像一种形式MVVM Light
- 信使/中保从PRISM
- 或者干脆使用harcoupling和订阅从您mainviewmodel的WhatEverViewModel的事件。
btw为什么要在你的视图模式中使用DependencyProperties?使用INotifyPropertyChanged的简单属性是要走的路。
还有一件事。 为什么要对SelectedViewmodel中的更改做出反应(或更好地实现所选视图模型?)?如果您只想在视图中显示一些信息,只需将SelectedViewmodel绑定到它。你应该以这种方式指定你的问题。
编辑
的WhatEverViewModel具有其也势必一个列表框(在 的DataTemplate)的列表,并根据我在WhatEverViewModel 选择我想要显示某种“配置”中的MainViewModel。 - JensPfister1 1小时前
为什么不直接绑定SelectedWhatEverViewmodel.SelectedListEntryProperty您配置的看法?你可以发布一些代码吗?
我可以在UI中操纵列表框的项目。如果当前选定项目的某些属性即将更改,我想作出反应。 为什么不使用DependencyProperties? – JensPfister1 2012-04-26 10:53:49
,因为简单的属性和INotifyPropertyChanged完成这项工作。 – blindmeis 2012-04-26 12:45:08
您是使用视角优先还是视角模式优先? – PVitt 2012-04-26 09:35:33
为什么你有一个包含ViewModel列表的列表框?每个视图通常有1个viewModel,每个viewModel都有一个模型列表(例如),您可以将该列表框绑定到视图中。除非这是你的意思。 – HAdes 2012-04-26 10:21:35
viewmodel有一个视图模型列表,这些视图模型绑定到xaml中的列表框。 – JensPfister1 2012-04-26 10:56:07