【问题标题】:Set property in DataContext object through xaml通过 xaml 在 DataContext 对象中设置属性
【发布时间】:2012-07-26 21:25:24
【问题描述】:

假设我有以下 xaml:

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

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

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

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

【问题讨论】:

    标签: .net xaml mvvm


    【解决方案1】:

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

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

    主视图模型包含子视图模型的一个实例。 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 中有实例。

    【讨论】:

      【解决方案2】:

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

      <UserControl x:Class="MainView" ...>
      :
      <my:ChildView DataContext{Binding ChildViewModelProperty}/>
      :
      </UserControl>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多