假设我有以下xaml:
<UserControl x:Class="MainView" ...>
:
<my:ChildView />
:
</UserControl>
当实例化ChildView时,它会自动创建一个ChildViewModel类型的对象,并将其附加到其DataContext。 ChildViewModel有一个属性“Abc”。
MainView有一个支持MainViewModel对象作为其DataContext。 MainViewModel还有一个属性“Def”。
有没有办法通过xaml将属性MainViewModel.Def中的值发送到ChildViewModel.Abc?
答案 0 :(得分:0)
视图模型之间的通信是通过messenger / mediator或eventaggregator完成的。你不必走“通过xaml”的方式
编辑:因为我喜欢viewmodel frist - 我在我的项目中这样做
mainviewmodel包含childviewmodel的一个实例。 ChildView不再创建ChildViewmodel。
<UserControl x:Class="MainView" ...>
<UserControl.Resources>
<DataTemplate DataType="{x:Type local:ChildViewmodel}">
<my:ChildView />
</DataTemplate>
</UserControl.Resources>
:
<ContentPresenter Content="{Binding MyChildView"} />
:
</UserControl>
不,我可以简单地将Def属性值设置为childviewmodel,因为我在mainviewmodel中有实例。
答案 1 :(得分:0)
如果它像父子视图一样,子视图不应该创建Viewmodel本身,而是将该childviewmodel创建为主视图模型的属性,并设置子视图的datacontext,如下所示。现在,主视图模型将可以访问子视图模型的属性
<UserControl x:Class="MainView" ...>
:
<my:ChildView DataContext{Binding ChildViewModelProperty}/>
:
</UserControl>