2011-03-09 64 views
0

我在用戶界面中有兩個不同的用戶控件。這些控件是UI層次結構中的同胞。是否可以從一個用戶控件發出一個命令並在另一個控件上處理它?WPF在不同的用戶控件中處理命令

換句話說,我可以使用其他用戶控件(如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

這是你的場景嗎?您有兩個控件(ChildViewA和ChildViewB)的父視圖。他們每個人都有自己的VM:

ParentView - ParentVM ChildViewA - ChildAVM ChildViewB - ChildBVM

ChildViewA執行其使用RelayCommand內ChildAVM處理的命令。 ChildAVM通知ParentVM該命令已執行。 ParentVM通知ChildBVM該命令已執行。 虛擬機之間如何互相通信取決於你需要/希望他們是多麼鬆散的連接。

一個簡單的實現方法是讓子虛擬機實現INotifyPropertyChanged。然後,ParentVM可以分派給PropertyChanged事件。該命令將導致一些屬性在ChildAVM上發生變化,ParentVM會注意到這些屬性。 parentVM接下來會在ChildBVM上設置一些屬性。

+0

將按照您的建議進行操作。起初我以爲我會去參加活動彙總和統一框架。然而,現在我意識到這是不可行的,因爲我只是做一個應用程序的一部分,它會太複雜。換句話說,僅對應用程序的一個部分應用統一框架是很困難的。謝謝。 – Jimmy 2011-03-16 15:32:14

1

在Silverlight中,我會做類似以下的事情。它也應該在WPF中工作。

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

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