Обработка команд WPF в разных пользовательских элементах управления - PullRequest
0 голосов
/ 09 марта 2011

У меня в пользовательском интерфейсе два разных пользовательских элемента управления. Эти элементы управления являются братьями и сестрами в иерархии пользовательского интерфейса. Можно ли запустить команду из одного пользовательского элемента управления и обработать ее для другого?

Другими словами, можно ли использовать свойство ICommand из следующей ViewModel из другого пользовательского элемента управления (скажем, UserControlAViewModel)?

class UserControlBViewModel : ViewModelBase
{
  public ICommand Command
    {
        get
        {
            if (_Command == null)
            {
                _Command = new RelayCommand(param => this.CommandExecute(), param => this.CommandCanExecute);
            }
            return _Command ;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Это ваш сценарий? У вас есть родительское представление с двумя элементами управления (ChildViewA и ChildViewB). У каждого из них есть своя виртуальная машина:

ParentView - ParentVM ChildViewA - ChildAVM ChildViewB - ChildBVM

ChildViewA выполняет команду, которая обрабатывается внутри ChildAVM с помощью RelayCommand. ChildAVM сообщает ParentVM, что команда выполнена. ParentVM сообщает ChildBVM, что команда выполнена. То, как виртуальные машины взаимодействуют друг с другом, зависит от того, насколько слабо они связаны между собой.

Один простой способ реализовать это - заставить дочерние виртуальные машины реализовать INotifyPropertyChanged. Затем ParentVM может подписаться на событие PropertyChanged. Команда вызовет изменение какого-либо свойства в ChildAVM, которое будет замечено ParentVM. Затем parentVM установит какое-либо свойство в ChildBVM.

1 голос
/ 09 марта 2011

В Silverlight я бы сделал что-то вроде следующего.Это должно работать и в WPF.

<Button x:Name="Btn01"
        DataContext="{StaticResource Btn01ViewModel}"
        Command="{Binding MyButtonCommand}"></Button>

<Button Command="{Binding DataContext.MyButtonCommand, ElementName=Btn01}"></Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...