WPF命令处理不同的用户控件

时间:2011-03-09 16:58:50

标签: wpf mvvm

我的UI中有两个不同的用户控件。这些控件是UI层次结构中的兄弟节点。是否可以从一个用户控件触发命令并在另一个用户控件上处理它?<​​/ p>

换句话说,我可以从其他用户控件(比如UserControlAViewModel)使用以下ViewModel中的ICommand属性吗?

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

2 个答案:

答案 0 :(得分:2)

这是你的情景吗?您有一个父视图有两个控件(ChildViewA和ChildViewB)。他们每个人都有自己的VM:

ParentView - ParentVM ChildViewA - ChildAVM ChildViewB - ChildBVM

ChildViewA使用RelayCommand执行在ChildAVM内处理的命令。 ChildAVM通知ParentVM该命令已执行。 ParentVM通知ChildBVM该命令已执行。 虚拟机如何相互通信取决于您需要/希望它们之间的连接松散程度。

实现此目的的一种简单方法是让子VM实现INotifyPropertyChanged。然后ParentVM可以加入PropertyChanged事件。该命令将导致ChildAVM上的某些属性发生变化,这将被ParentVM注意到。 parentVM接下来将在ChildBVM上设置一些属性。

答案 1 :(得分:1)

在Silverlight中,我会做类似以下的事情。它也应该在WPF中工作。

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

<Button Command="{Binding DataContext.MyButtonCommand, ElementName=Btn01}"></Button>