[英]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.