通过xaml在DataContext对象中设置属性

时间:2012-07-26 21:25:25

标签: .net xaml mvvm

假设我有以下xaml:

<UserControl x:Class="MainView" ...>
    :
    <my:ChildView />
    :
</UserControl>

当实例化ChildView时,它会自动创建一个ChildViewModel类型的对象,并将其附加到其DataContext。 ChildViewModel有一个属性“Abc”。

MainView有一个支持MainViewModel对象作为其DataContext。 MainViewModel还有一个属性“Def”。

有没有办法通过xaml将属性MainViewModel.Def中的值发送到ChildViewModel.Abc?

2 个答案:

答案 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>