【问题标题】:How can I bind a control's command to a child viewmodel command in an MVVM scenario?如何在 MVVM 场景中将控件的命令绑定到子视图模型命令?
【发布时间】:2013-01-16 19:28:21
【问题描述】:

我在 WPF 中有一个基于视图模型的窗口。视图模型包括一个可以在运行时切换的子视图模型。每个子视图模型都有自己的命令。父视图包含一个带有按钮的功能区,这些按钮需要绑定到当前子视图模型命令。要切换视图,我在使用数据模板的父视图中使用内容控件。每个可能的子视图都是绑定到适当视图模型的用户控件(该位有效)。

    <!-- Switchable area -->
    <ContentControl Content="{Binding ChildViewModel}">
        <ContentControl.Resources>
            <DataTemplate DataType="{x:Type vm:VersionsViewModel}">
                <embeddable:VersionsView />
            </DataTemplate>
            <DataTemplate DataType="{x:Type vm:LockListViewModel}">
                <embeddable:LockListView />
            </DataTemplate>
        </ContentControl.Resources>
    </ContentControl>

例如,我的一个子视图模型有一个刷新命令。我希望它出现在功能区按钮的主视图中。我尝试将绑定设置为以下 XAML,但它从未绑定,因此不会调用该命令。我做错了什么?

<telerik:RadRibbonButton Size="Large"
                         Text="Refresh"
                         LargeImage="..\Images\Ribbon\32x32\Refresh.png"
                         Command="{Binding ChildView.RefreshCommand}" 
                         telerik:KeyTipService.AccessText="R"/>

在主视图的其他地方,我绑定了来自子视图模型的数据并且工作正常,所以我真的很困惑!例如,这是我用来获取窗口标题的绑定。

Title="{Binding ChildViewModel.Title,FallbackValue='My System'}"

【问题讨论】:

  • RibbonButtons 命令属性的绑定具有路径 ChildView.... 而标题属性的绑定具有路径 ChildViewModel....
  • 至少您可以使用 Snoop 检查功能区的数据上下文,以查看功能区的实际数据上下文是什么。

标签: wpf mvvm


【解决方案1】:
<telerik:RadRibbonButton Size="Large"
                         Text="Refresh"
                         LargeImage="..\Images\Ribbon\32x32\Refresh.png"
                         Command="{Binding ChildViewModel.RefreshCommand}" 
                         telerik:KeyTipService.AccessText="R"/>

你没有绑定到视图模型

【讨论】:

  • 哦!我又是个白痴 :) 谢谢 - 我花了很长时间盯着它看,却没有发现那个错字。
猜你喜欢
  • 2010-11-28
  • 2011-07-29
  • 2014-11-08
  • 2011-09-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多