Почему эта команда команда не работает? - PullRequest
0 голосов
/ 06 июля 2010

У меня есть приложение WPF, у которого есть главное окно, состоящее из нескольких пользовательских элементов управления UserControl, помещенных в контейнеры AvalonDock.

Я хочу, чтобы некоторые функции UserControls были доступны с панели инструментов и меню в главном окне.У меня есть команда, определенная следующим образом:

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

            return unfoldAllCommand; 
        }
    }

Теперь у меня есть этот UserControl, определенный в главном окне XAML под именем "editor"

    <local:Editor x:Name="editor" />

Этот элемент управления такжеОбнародован через свойство Edtor главного окна (это собственный DataContext).

    public Editor Editor { get { return this.editor; } }

Меню находится в главном окне XAML.Это определение определения одного MenuItem, который запускает команду UnoldAll UserControl, работает отлично.

    <MenuItem Header="Unfold All" Command="{Binding UnfoldAllCommand, ElementName=editor}" InputGestureText="Ctrl+U" />

Тем не менее, это определение, возможно, красивее, но не работает (MenuItem кликабелен, но не запускаетРазвернуть все методы):

    <MenuItem Header="Unfold All" Command="{Binding Editor.UnfoldAllCommand}" InputGestureText="Ctrl+U" />

Почему?

Ответы [ 2 ]

0 голосов
/ 08 августа 2010

Проблема заключалась в том, что для работы {Binding Editor.Property} редактор также должен быть свойством зависимости (не только свойством).

0 голосов
/ 06 июля 2010

Ваша привязка смотрит на DataContext, а ваша последняя привязка говорит: Whatevers на DataContext, найдите мне редактор свойств, а затем свойство UnfoldAllCommand.

Таким образом, ваша первая привязка верна.

Вы можете установить редактор на DataContext в коде, изменив Binding на UnfoldAllCommand.

После места InitializeComponents ():

DataContext = this;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...