2011-08-10 6 views
0

InformationView.xaml이라는 뷰가 있으며이 뷰는 다시 3 가지 소스의 동일한 정보를 표시하는 데 사용됩니다. 각 뷰에는 다른 창 제목이 있습니다. 각 뷰는 자신의 datacontext에 하나의 ViewModel 유형의 동일한 인스턴스를 설정합니다. 내 ViewModel 클래스 내에서보기 내부의 '닫기'버튼이 바인딩 된 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를 사용하는 View의 인스턴스).

+0

당신이 알아야하는 이유에 대해 자세히 설명 할 수 어느 뷰가 Close 명령을 호출 했습니까? –

+0

명령을 실행 한 View에 따라 다른 메서드가 실행됩니다. –

+2

각 비헤이비어에 대해 새 ViewModel을 파생시키고 OnClose() 메서드를 재정의하지 않겠습니까? –

답변

0

정확하게 이해하고 있는지 잘 모르겠습니다. 그러나 Unloaded 이벤트를 구현할 수 있습니다. 해당 이벤트 메서드 내에서 중단 점을 설정할 때 중단 점을 설정하십시오. 해당보기의 창 제목 속성을 확인할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 Matt Hamilton (위의 설명 참조)은이를 수행하는 방법에 대해 올바른 방향으로 나를 밀어 냈습니다. –

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 
} 
관련 문제