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