我需要弄清楚如何在 ViewModel 之间进行通信。我是 MVVM 的新手,所以请善待。
这是一个愚蠢的例子
类定义(假设我已经在 ParentViewModel 中挂钩 Child.PropertyChanged 事件):
public class ParentViewModel : ViewModelBase
{
public ChildViewModel Child { get; set; }
}
public class ChildViewModel : ViewModelBase
{
String _FirstName;
public String FirstName
{
get { return _FirstName; }
set
{
_FirstName = value;
OnPropertyChanged("FirstName");
}
}
}
这是您在资源字典中看到的内容
<DataTemplate DataType="{x:Type vm:ParentViewModel}">
<vw:ParentView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ChildViewModel}">
<vw:ChildView/>
</DataTemplate>
和 ChildView 的代码隐藏:
public partial class ChildView : UserControl
{
public QueueView()
{
InitializeComponent();
DataContext = new ChildViewModel();
}
}
明显的问题是,当 ChildView 被实例化(通过从 DataTemplate 中选择)时,它会创建一个新的 ChildViewModel 类,而 ParentViewModel 无权访问它。
那么如何将 View 的 DataContext 实例化为导致 DataTemplate 被选中的原始 ViewModel 呢?
一个明显的解决方法是将 ChildViewModel 中的属性合并到 ParentViewModel 中,但我宁愿将它分开,因为以便重用。
我敢肯定答案是微不足道的,我只是想知道它是什么。:)
提前致谢。