2011-08-10 20 views
0

私は、InformationView.xamlと呼ばれるビューを持っています。この同じビューは、3つの異なるソースから同じ情報を表示するために再利用されます。各ビューのdatacontextには、1つのViewModelタイプの同じインスタンスが設定されています。私のViewModelクラス内には、View内の 'Close'ボタンがバインドされているICommandプロパティがあります。 - 送信者が誰であるかを判断する方法はありますか? (具体的には、ウィンドウタイトルによって)。ここでどのコマンドがどのコマンドを実行したかを調べる方法

は一例です:

私は、以下のボタン(「注:各ビューは、異なるソースからの異なるウィンドウタイトル/表示データを持っています - しかし、同じビューが使用されている)でビュークラスを持っています

<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

あなたが知っておく必要がある理由について詳しく説明することはできますどのビューからCloseコマンドが呼び出されましたか? –

+0

どのビューがコマンドを実行したかによって、別のメソッドが実行されます –

+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 
} 
関連する問題