0

假设我有以下 xaml:

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

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

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

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

4

2 回答 2

0

视图模型之间的通信是通过 messenger/mediator 或 eventtaggregator 完成的。你不必走“通过xaml”的路

编辑:因为我喜欢 viewmodel fist - 我在我的项目中这样做

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 中有该实例。

于 2012-07-27T06:03:36.467 回答
0

如果它像父子视图,则子视图不应创建 Viewmodel 本身,而是将该子视图模型创建为主视图模型的属性,并设置子视图的数据上下文,如下所示。现在主视图模型将可以访问子视图模型的属性

<UserControl x:Class="MainView" ...>
:
<my:ChildView DataContext{Binding ChildViewModelProperty}/>
:
</UserControl>
于 2012-07-27T08:39:42.463 回答