Я пишу для Windows 8.1 App Store, в C#, MVVM Pattern.Уведомить Parent ViewModel в MVVM
У меня есть 3 ViewModels: 1. BaseViewModel 2. StudentViewModel 3. StudentDashboardViewModel
Его, как:
- Я добавил BaseViewModel.
- Я унаследовал StudentViewModel от BaseViewModel.
- Затем унаследовано StudentDashboardViewModel от StudentViewModel.
Я сделал страницу StudentDashboardPage и я переплетен его StudentDashboardViewModel.
Я пытаюсь изменить пример свойства, IsBlackIn в StudentViewModel с помощью другого класса, но проблема в том, что она не уведомляя ее ребенка ViewModel StudentDashboardViewModel.
Итак, как уведомить дочерний режим просмотра изменений в родительской модели. Вот код:
BaseViewModel:
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)
{
if (Object.Equals(storage, value))
{
return false;
}
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var eventHandler = this.PropertyChanged;
if (eventHandler != null)
{
eventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
StudentViewModel:
public class StudentViewModel : BaseViewModel
{
private static StudentViewModel studentViewModel;
public static StudentViewModel Singleton()
{
if (studentViewModel == null)
{
studentViewModel = new StudentViewModel();
}
return studentViewModel;
}
private bool _IsBlackIn = false;
public bool IsBlackIn
{
get { return _IsBlackIn; }
set
{
SetProperty<bool>(ref _IsBlackIn, value);
}
}
}
StudentDashboardViewModel:
public class StudentDashboardViewModel : StudentViewModel
{
public static StudentDashboardViewModel studentDashboardViewModel;
public static StudentDashboardViewModel GetSingleInstance()
{
return studentDashboardViewModel ?? (studentDashboardViewModel = new StudentDashboardViewModel());
}
}
StudentDashboardPage страница за код:
public sealed partial class StudentDashboardPage : Page
{
private StudentDashboardViewModel studentDashvm;
public StudentDashboardPage()
{
this.InitializeComponent();
this.Loaded += StudentDashboardPage_Loaded;
}
private void StudentDashboardPage_Loaded(object sender, RoutedEventArgs e)
{
this.studentDashvm = StudentDashboardViewModel.GetSingleInstance();
this.DataContext = studentDashvm;
}
}
Назад к основным принципам MVVM. Почему ваш SingleMonels ViewModels на первом месте? Предполагается, что ViewModel жив только до тех пор, пока отображается соответствующий вид, а не на протяжении всего срока службы приложения. – niksofteng
Я планирую вернуться обратно из синглтона, но как насчет проблемы с сообщением? –
View-models могут пережить свои взгляды и даже быть разделены несколькими видами, но я согласен, что они не должны быть одиночными. –