为什么这个命令绑定不起作用?

时间:2010-07-06 12:53:59

标签: c# wpf xaml binding

我有一个WPF应用程序,它有一个主窗口,由几个放在AvalonDock容器中的自定义UserControl组成。

我希望可以从主窗口中的工具栏和菜单栏访问某些UserControls功能。我在控件中定义了一个命令,如下所示:

    public ICommand UnfoldAllCommand
    {
        get
        {
            if (this.unfoldAllCommand == null)
            {
                this.unfoldAllCommand = new RelayCommand(param => this.UnfoldAll());
            }

            return unfoldAllCommand; 
        }
    }

现在我在主窗口XAML中定义了这个UserControl,名称为“editor”

    <local:Editor x:Name="editor" />

此控件也通过主窗口的Edtor属性公开(窗口是它自己的DataContext)。

    public Editor Editor { get { return this.editor; } }

菜单栏位于主窗口XAML中。触发UserControl的UnfoldAll命令的一个MenuItem的定义定义完美无缺。

    <MenuItem Header="Unfold All" Command="{Binding UnfoldAllCommand, ElementName=editor}" InputGestureText="Ctrl+U" />

然而,这个定义可以说更漂亮,但它不起作用(MenuItem是可点击的,但不会触发UnfoldAll方法):

    <MenuItem Header="Unfold All" Command="{Binding Editor.UnfoldAllCommand}" InputGestureText="Ctrl+U" />

为什么?

2 个答案:

答案 0 :(得分:0)

你的绑定查看了DataContext,你的上一个绑定说:Whatevers在DataContext上,给我属性编辑器,然后是属性UnfoldAllCommand

因此,您的第一个绑定是正确的。

您可以在代码后面的DataContext上设置编辑器,将绑定更改为UnfoldAllCommand

在InitializeComponents()之后:

DataContext = this;

答案 1 :(得分:0)

问题是,要使{Binding Editor.Property}起作用,编辑器也必须是依赖属性(不仅是属性)。