我需要弄清楚如何在ViewModels之间进行通信。我是MVVM的新手,所以请客气。MVVM模式,ViewModel DataContext问题
这里有一个简单化例如
类定义(假设我已经迷上在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不能访问它。
所以,我怎么能实例化视图的DataContext的是导致要选择的DataTemplate中原来的视图模型?
一个显而易见的解决办法是mmerge在ChildViewModel到ParentViewModel的属性,但我宁愿分开,因为重复使用。
我相信答案是微不足道的,我只是想知道它是什么。 :)
在此先感谢。
顺便说一句,我认为你要想在代码,以简化的例子......对于“ChildView”之类的名字改变了你的类的名称背后,是“QueueView”代替。 – 2009-05-05 16:45:45
这是一个错误? – 2009-05-05 16:45:57
是的,这是一个错字。对不起:) – Jose 2009-05-07 12:45:41