По-прежнему пытается узнать MVVM и WPF здесь.Вложенная модель в WPF
Я пытаюсь создать сложную модель вида EditArticleViewModel
. У этого есть некоторый код, который повторяется для аналогичных элементов управления, и поэтому я переместил повторяющийся код в другой класс. Затем я добавил несколько экземпляров этого другого класса в EditArticleViewModel
.
Я установил экземпляр EditArticleViewModel
в качестве моего окна DataContext
. И я буду привязываться к вещам вроде Categories.Items
и Subcategories.SelectedItem
.
public class CategoryView
{
public ObservableCollection<object> Items { /* */ }
public object SelectedItem { /* ... */ }
}
public class SubcategoryView
{
public ObservableCollection<object> Items { /* */ }
public object SelectedItem { /* ... */ }
}
public class EditArticleViewModel : INotifyPropertyChanged
{
public CategoryView Categories { get; private set; }
public SubcategoryView Subcategories { get; private set; }
public EditArticleViewModel()
{
Categories = new CategoryView();
SubcategoryView Subcategories new SubcategoryView();
}
// Additional properties and methods here
}
Как вы можете видеть, мой EditArticleViewModel
класс реализует INotifyPropertyChanged
, чтобы я мог уведомить визуальные элементы, когда что-то изменилось.
Мой вопрос о том, как я уведомляю визуальные элементы об изменениях в пределах CategoryView
и SubcategoryView
. Есть ли способ напрямую уведомлять окно об изменениях в этих классах? Или я должен поднимать событие из каждого класса и иметь EditArticleViewModel
обрабатывать это событие, чтобы отправить соответствующее уведомление?
Любые советы, оцененные.
Не могли бы вы использовать 'SubcategoryView' и' CategoryView' для реализации 'INotifyPropertyChanged', и просто разрешите представление обрабатывать изменения? – Michael
@Michael: Но тогда мне не нужно было устанавливать DataContext для этих экземпляров класса? –
@JonathanWood Если привязка может найти заданное свойство на заданном объекте, разве вы не думаете, что он также может найти объект, на котором он нашел свойство? Бросьте проблемы с заимствованием и напишите какой-то тривиальный код, чтобы играть с этим материалом. Скоро у вас будет много реальных вопросов. –