我使用這種技術用於導航視圖之間:https://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspx訪問視圖模型屬性視圖模型
我已與結合到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));
}
}
}
如果I」 m在SomeView中,我想在切換到OtherView之前檢查其屬性(更改次數),並向用戶顯示確認對話框以確認其操作。我需要當前值,但任何屬性似乎都有其初始值。爲什麼?
這樣做最乾淨的方式是什麼?我知道這可以通過使屬性成爲靜態來完成,但對我來說這似乎很髒。
我猜'OpenOtherView'中的'CurrentViewModel'應該是'SelectedViewModel'?你也確定'NumberOfChanges'實際上在'SomeViewModel'中改變了嗎? – Mats391
確實,我縮短了代碼,以便它只顯示需要什麼,並由於某種原因將其更名,並予以更正。是的,我確定,在子ViewModel中,該值是正確的。 – Destroy666
你發佈的代碼應該從我可以告訴的內容開始工作,所以我懷疑問題在子ViewModel中。如果您只需要更改的次數,那麼通過像Satish這樣的孩子的'PropertyChanged'事件來計算父ViewModel中的那些變量應該可以工作。 – Mats391