繁体   English   中英

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

[英]Why doesn't this command binding work?

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

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

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

            return unfoldAllCommand; 
        }
    }

现在,我在主窗口XAML中以名称“ editor”定义了此UserControl。

    <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" />

为什么?

您的绑定将查看DataContext ,最后一个绑定将显示: DataContext上的所有内容,请给我属性Editor,然后给我属性UnfoldAllCommand

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

您可以在后面的代码中在DataContext上设置Editor,将Binding更改为UnfoldAllCommand

在InitializeComponents()之后:

DataContext = this;

问题在于,要使{Binding Editor.Property}起作用,Editor也必须是一个依赖项属性(不仅是Property)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM