簡體   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