2011-08-10 53 views
0

我有一個叫做InformationView.xaml的視圖,這個視圖被重用來顯示來自3個不同來源的相同信息(每個視圖都有不同的窗口標題)。每個視圖都將其datacontext設置爲一個ViewModel類型的同一個實例。在我的ViewModel類中,我有一個ICommand屬性,View中的'Close'按鈕被綁定。 - 有沒有辦法確定發件人是誰的命令? (具體來說,通過窗口標題)。如何確定哪個視圖執行了一個命令

下面是一個例子:

我有以下按鈕的視圖類(「注意:每個View將具有來自不同來源不同的窗口標題/顯示數據 - 但相同的視圖用於)

<Button Width="75" Height="23" Margin="0,0,5,5" Content="Close" Command="{Binding CloseCommand}" /> 

我有以下命令

public ICommand CloseCommand 
    { 
     get 
     { 
      if (this._closeCommand == null) 
      { 
       this._closeCommand = new RelayCommand(Command => this.OnClose()); 
      }  
      return _closeCommand; 
     } 
    } 

我正在尋找一種方法來確定哪些窗口中運行的命令ViewModel類(我會有多使用相同的ViewModel查看View的實例)。

+0

能不能介紹一下爲什麼你需要知道詳細哪個視圖調用了關閉命令? –

+0

取決於哪個View執行了該命令,將會執行一個不同的方法 –

+2

您是不是會爲每個行爲派生一個新的ViewModel並重寫OnClose()方法呢? –

回答

0

我不確定我是否正確理解你。但是,您可能會執行Unloaded事件。在該事件方法內部設置一個斷點,以及何時點擊該斷點。您可以檢查該視圖的窗口標題屬性。

+0

感謝您的回覆,但馬特漢密爾頓(見上面的評論)推動了我如何實現這一目標的正確方向。 –

0

只要公開Close()方法,讓其他對象可以指定接近行爲應該是什麼?

InformationViewModel沿着這個東西線:

public event EventHandler RequestClose; 

void OnRequestClose() 
{ 
    EventHandler handler = this.RequestClose; 
    if (handler != null) 
     handler(this, EventArgs.Empty); 
} 

然後你就可以在你的其他視圖模型中使用它是這樣的:

InformationViewModel.Close += CloseMethod; 

public CloseMethod(object sender, EventArgs e) 
{ 
    // Implement close logic here 
} 
相關問題