2017-05-22 2 views
0

내가보기 사이 탐색이 기술을 사용하고 있습니다 : https://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspx액세스 뷰 모델 속성 뷰 모델

내가 SelectedViewModel 속성 변화에 바인딩 메뉴 버튼을 사용하여 주요 ViewModel을 명령했다 :

class MainViewModel : INotifyPropertyChanged 
{ 
    public ICommand SomeViewCommand { get; set; } 
    public ICommand OtherViewCommand { get; set; } 
    private object selectedViewModel; 
    public event PropertyChangedEventHandler PropertyChanged; 

    public object SelectedViewModel 
    { 
     get { return selectedViewModel; } 
     set { selectedViewModel = value; OnPropertyChanged("SelectedViewModel"); } 
    } 

    public MainViewModel() 
    { 
     SomeViewCommand = new RelayCommand<object, object>(null, (object o) => OpenSomeView()); 
     OtherViewCommand = new RelayCommand<object, object>(null, (object o) => OpenOtherView()); 
    } 

    private void OpenSomeView() 
    { 
     SelectedViewModel = new SomeViewModel(); 
    } 

    private void OpenOtherView(object obj) 
    { 
     if(SelectedViewModel != null && SelectedViewModel.GetType() == typeof(SomeViewModel)) 
     { 
      SomeViewModel s = (SomeViewModel)SelectedViewModel; 

      // always 0 
      if (s.NumberOfChanges > 0) 
      { 
      MessageBox.Show("test", "Error"); 
      } 

      // SelectedViewModel = new OtherViewModel(); after confirmation dialog 
     } 
     else 
      SelectedViewModel = new OtherViewModel(); 
    } 

    private void OnPropertyChanged(string propName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
     } 
    } 

} 

나는 '경우 m SomeView에서, OtherView로 전환하기 전에 속성 (변경 횟수)을 확인하고 사용자에게 확인 대화 상자를 표시하여 조치를 확인하고 싶습니다. 현재 값이 필요하지만 모든 속성의 초기화 값이있는 것 같습니다. 왜?

이렇게하는 가장 깨끗한 방법은 무엇입니까? 나는 그것을 정적으로 만들면 끝날 수 있지만 그것이 나에게 더러운 것처럼 보입니다.

+0

OpenOtherView의'CurrentViewModel'은'SelectedViewModel'이어야한다고 생각하십니까? 또한'SomeOpenModel'에서'NumberOfChanges'가 실제로 변경 되었습니까? – Mats391

+0

실제로 필자는 필요한 코드 만 보여주고 수정 된 이유를 수정했습니다. 그리고 네, 확실히 아이 ViewModel 내에서 값이 정확합니다. – Destroy666

+0

게시 한 코드는 내가 말할 수있는대로 작동하므로 하위 ViewModel 내에있는 것으로 의심됩니다. 변경 횟수 만 필요하면 Satish처럼 자식의 'PropertyChanged' 이벤트를 통해 상위 ViewModel에서 계산 한 수를 계산하면 좋습니다. – Mats391

답변

0

OnPropertyChanged 메서드에서 NumberOfChanges를 설정할 수 있습니다.

+0

나는 당신을 정확하게 이해하는지 모르겠다. 간단한 예를 보여줄 수 있겠습니까? – Destroy666

+0

'private void OnPropertyChanged (string propName) { if (PropertyChanged! = null) { \t s.NumberOfChanges ++; PropertyChanged (this, 새 PropertyChangedEventArgs (propName)); } } ' 위와 같은 것입니다. 속성 변경시이 메소드에 들어갈 것이기 때문입니다. 거기에서 증가시킬 수 있습니다. 내가 틀렸다면 나를 바로 잡아라. –