我使用这种技术在视图之间导航:https://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspx
我将带有菜单按钮的主ViewModel绑定到SelectedViewModel属性更改命令:
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));
}
}
}如果我在SomeView中,我想在切换到OtherView之前检查它的属性(更改次数),并向用户显示一个确认对话框以确认他们的操作。我需要当前值,但是任何属性似乎都有它的初始化值。为什么?
做这件事最干净的方式是什么?我知道这可以通过将属性设置为静态来完成,但这对我来说似乎很脏。
发布于 2017-05-22 14:16:44
在OnPropertyChanged方法中,您可以设置NumberOfChanges。
https://stackoverflow.com/questions/44105035
复制相似问题