2012-04-26 56 views
2

我是新与MVVM和我被困...MVVM SelectedItem.Property调用onChanged

我在主窗口的列表框。 ListBox包含由DataTemplates显示的WhatEverViewModel类型的项目。用户可以与这些项目交互,并且WhatEverViewModel有几个DependencyProperties,这些DependencyProperties在交互过程中可能会改变。

我的问题是: 我怎样才能优雅反应(在MainWindowViewModel)到当前选定WhatEverViewModel的DependencyProperties的变化。我个人会在WhatEverViewModel中实现一些事件,并且当ListBox的SelectedItem发生变化时,我会附加到当前选定的WhatEverViewModel的事件。但我认为在MVVM中可能有更好的方法来解决这个问题...

谢谢。

+0

您是使用视角优先还是视角模式优先? – PVitt 2012-04-26 09:35:33

+0

为什么你有一个包含ViewModel列表的列表框?每个视图通常有1个viewModel,每个viewModel都有一个模型列表(例如),您可以将该列表框绑定到视图中。除非这是你的意思。 – HAdes 2012-04-26 10:21:35

+0

viewmodel有一个视图模型列表,这些视图模型绑定到xaml中的列表框。 – JensPfister1 2012-04-26 10:56:07

回答

2

CurrentWhatEverMainWindowViewModel的属性和Listbox.SelectedItem属性绑定就可以了。这样一来,当所选的任何变化,并且可以注册/注销事件很感兴趣MainWindowViewModel知道。

+0

这就是我已经做的。因此,除了WhatEverViewModel中的一个事件通知重要属性更改时,没有其他解决方案? – JensPfister1 2012-04-26 09:51:04

+0

也许你可以更详细地解释你的WhatEverViewModel发生了什么,以及你希望你的MainWindowViewModel如何反应。 – 2012-04-26 09:58:15

+0

WhatEverViewModel有一个列表,它也绑定到一个列表框(在datatemplate中),并取决于我在WhatEverViewModel中选择的内容,我想在MainViewModel中显示某种“配置器”。 – JensPfister1 2012-04-26 10:57:34

0

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

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

更多指导阅读:

+0

@ JensPfister1想在MainViewModel中做出反应,而不是在View中做出反应。 – 2012-04-26 09:46:18

+0

Woops,我误解了它。 – Kolky 2012-04-26 09:48:51

2

视图模型之间的通信可以通过多种方式来完成。像一种形式MVVM Light

  • Eventstuff像一个

    • 信使/中保从PRISM
    • 或者干脆使用harcoupling和订阅从您mainviewmodel的WhatEverViewModel的事件。

    btw为什么要在你的视图模式中使用DependencyProperties?使用INotifyPropertyChanged的简单属性是要走的路。

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

    编辑

    的WhatEverViewModel具有其也势必一个列表框(在 的DataTemplate)的列表,并根据我在WhatEverViewModel 选择我想要显示某种“配置”中的MainViewModel。 - JensPfister1 1小时前

    为什么不直接绑定SelectedWhatEverViewmodel.SelectedListEntryProperty您配置的看法?你可以发布一些代码吗?

  • +0

    我可以在UI中操纵列表框的项目。如果当前选定项目的某些属性即将更改,我想作出反应。 为什么不使用DependencyProperties? – JensPfister1 2012-04-26 10:53:49

    +0

    ,因为简单的属性和INotifyPropertyChanged完成这项工作。 – blindmeis 2012-04-26 12:45:08