我有一个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" />
为什么?
答案 0 :(得分:0)
你的绑定查看了DataContext
,你的上一个绑定说:Whatevers在DataContext
上,给我属性编辑器,然后是属性UnfoldAllCommand
。
因此,您的第一个绑定是正确的。
您可以在代码后面的DataContext
上设置编辑器,将绑定更改为UnfoldAllCommand
。
在InitializeComponents()之后:
DataContext = this;
答案 1 :(得分:0)
问题是,要使{Binding Editor.Property}起作用,编辑器也必须是依赖属性(不仅是属性)。