我正在使用带有一组UserControl的WPF Window
,每个UserControl都有自己的ViewModel。在容器Window
的ViewModel上,我有他们的ViewModel实例。
在其中一个UserControl中,有一个ComboBox
,在SelectionChanged
上,我需要更新其他UserControls以及容器Window
(即它们对应的ViewModel)。 / p>
我试图废弃为这些用户控件使用ViewModel的想法,而是在容器表单的ViewModel上使用它们的功能,但这似乎不对,因为用户控件实际上做了很多,而且它非常复杂容器窗口'ViewModel。
上的所有内容有没有办法实现这个目标,还是应该使用“容器窗口的ViewModel上的所有东西”?
非常感谢任何帮助。
答案 0 :(得分:1)
使用delegate
s,您可以轻松实现所需(使用每个控件的视图模型)。您可以在MSDN的Delegates (C# Programming Guide)页面上找到有关delegates
的更多信息。
基本上,您需要在delegate
个对象中创建一个或多个UserControl
...它们非常适合将信息从父母传递给孩子,反之亦然:
public delegate void ParentNotification(YourDataType dataTypeInstance);
然后一个吸气剂为每个吸气剂:
public ParentNotification OnSelectionChanged { get; set; }
现在,实例化UserControl
的窗口可以为每个代理注册一个处理程序:
<YourXmlNamespace:YourUserControl OnSelectionChanged="OnSelectionChangedhandler" />
然后添加一个与delegate
中的MainWindow.xaml.cs
的定义匹配的处理程序:
public void OnSelectionChangedhandler(YourDataType dataTypeInstance)
{
// do something with dataTypeInstance
}
最后一个难题是在发生任何条件后从每个delegate
调用UserControl
...在这种情况下,条件是选择更改:
private void ComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)
{
YourDataType dataTypeInstance = null;
if (e.AddedItems.Count > 0)
{
dataTypeInstance = (YourDataType)e.AddedItems[0];
if (OnSelectionChanged != null) // very important check here
{
OnSelectionChanged(dataTypeInstance);
}
}
}