【问题标题】:Trouble binding command to button in WPF麻烦将命令绑定到 WPF 中的按钮
【发布时间】:2011-02-17 14:55:21
【问题描述】:

我在已实现的功能区中有一个按钮,但无法绑定到命令。功能区位于名为 AppRibbon 的用户控件中。 AppRibon 控件有一个名为 SelectedModule 的公共属性,该属性有一个名为 RenameModuleCmd 的属性。当我为按钮创建事件处理程序时,我显式调用该命令以确保一切正常,如下所示:

  public partial class ApplicationRibbon : UserControl {
    public ApplicationRibbon() {
      InitializeComponent();
    }

    public ModuleViewModel SelectedModule { get; set; }

    private void ButtonTool_Click(object sender, RoutedEventArgs e) {
      SelectedModule.RenameModuleCmd.Execute(null);
    }
  }

这很好用。但我显然不想使用模型背后的代码......而是使用 Command 绑定。所以我尝试了以下绑定,但没有触发命令。

<... Command="{Binding Path=SelectedModule.RenameModuleCmd}" />
<... Command="{Binding Path=AppRibbon.SelectedModule.RenameModuleCmd}" />

我不明白为什么这些不起作用。我已经在命令的 CanExecute 和 Execute 方法以及 RenameModuleCmd 属性的 getter 上设置了断点,但没有一个被命中。想法?

【问题讨论】:

    标签: wpf command mvvm


    【解决方案1】:

    在开发 UserControl 并在其中绑定时,您需要指定要绑定的元素。试试:

    <... Command="{Binding ElementName=AppRibbon, Path=SelectedModule.RenameModuleCmd}" />
    

    假设您的 UserControl 被命名为 AppRibbon,正如您的帖子似乎暗示的那样。

    【讨论】:

    • 感谢 JustABill,但我是在定义 SelectedModule 的 UserControl 中执行此操作的。因此,我认为 ElementName 不相关。我没有方便的应用程序来测试这个,但我怀疑它不会做出改变。
    • 这似乎很直观,但相信我,除非您传递 ElementName 或DataContext 已设置。如果你做了后者,那么我只是误读并道歉。
    • 我刚刚验证了名称 (),然后将其添加为绑定:Command="{Binding ElementName=Ribbon, Path=SelectedModule.RenameModuleCmd}"功能区 UserControl 具有 SelectedModule 的公共属性,该属性是 ModuleViewModel 类型,其中包含名为 RenameModuleCmd 的 ICommand 类型的公共属性。我在 getter 中设置了断点,不幸的是没有任何反应。但是,在同一个按钮中,如果我添加执行以下操作的单击处理程序,我将获得所需的行为(宁愿避免事件): SelectedModule.RenameModuleCmd.Execute(null);想法?
    • 我建议您查看bea.stollnitz.com/blog/?p=52,了解如何查看绑定失败的位置。如果它没有出现在那里,我真的不知道。也许实现 INotifyPropertyChanged?
    猜你喜欢
    • 2013-09-16
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多