내가보기 사이 탐색이 기술을 사용하고 있습니다 : 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로 전환하기 전에 속성 (변경 횟수)을 확인하고 사용자에게 확인 대화 상자를 표시하여 조치를 확인하고 싶습니다. 현재 값이 필요하지만 모든 속성의 초기화 값이있는 것 같습니다. 왜?
이렇게하는 가장 깨끗한 방법은 무엇입니까? 나는 그것을 정적으로 만들면 끝날 수 있지만 그것이 나에게 더러운 것처럼 보입니다.
OpenOtherView의'CurrentViewModel'은'SelectedViewModel'이어야한다고 생각하십니까? 또한'SomeOpenModel'에서'NumberOfChanges'가 실제로 변경 되었습니까? – Mats391
실제로 필자는 필요한 코드 만 보여주고 수정 된 이유를 수정했습니다. 그리고 네, 확실히 아이 ViewModel 내에서 값이 정확합니다. – Destroy666
게시 한 코드는 내가 말할 수있는대로 작동하므로 하위 ViewModel 내에있는 것으로 의심됩니다. 변경 횟수 만 필요하면 Satish처럼 자식의 'PropertyChanged' 이벤트를 통해 상위 ViewModel에서 계산 한 수를 계산하면 좋습니다. – Mats391