Ich verwende diese Technik für die Navigation zwischen den Ansichten: https://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspxZugriff auf Ansichtsmodell Eigenschaften in Mutteransichtsmodell
Ich habe das Hauptansichtsmodell mit Menütasten gebunden SelectedViewModel Eigenschaftsänderung Befehle:
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));
}
}
}
Wenn ich m in SomeView möchte ich die Eigenschaft (Anzahl der Änderungen) überprüfen, bevor ich zu OtherView wechsle, und dem Benutzer einen Bestätigungsdialog anzeigen, um seine Aktion zu bestätigen. Ich brauche den aktuellen Wert, aber jede Eigenschaft scheint ihren Initialisierungswert zu haben. Warum?
Was wäre der sauberste Weg, dies zu tun? Ich weiß, es kann getan werden, indem man die Eigenschaft statisch macht, aber das scheint mir dreckig zu sein.
Ich vermute, das 'CurrentViewModel' in' OpenOtherView' sollte 'SelectedViewModel' sein? Sind Sie sich auch sicher, dass 'NumberOfChanges' sich tatsächlich in' SomeViewModel' ändert? – Mats391
Es ist tatsächlich, ich habe den Code gekürzt, so dass er nur anzeigt, was gebraucht wird und dieses aus irgendeinem Grund umbenannt, korrigiert. Und ja, ich bin mir sicher, innerhalb des Child ViewModels ist der Wert korrekt. – Destroy666
Der von Ihnen gepostete Code sollte von dem funktionieren, was ich sagen kann, daher vermute ich, dass das Problem innerhalb des untergeordneten ViewModel liegt. Wenn Sie nur die Anzahl der Änderungen benötigen, sollte das Zählen derjenigen im übergeordneten ViewModel über das 'PropertyChanged'-Ereignis des Kindes, wie es Satish vorschlägt, ebenfalls funktionieren. – Mats391