【发布时间】:2016-08-07 16:32:26
【问题描述】:
这里还在尝试学习 MVVM 和 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:但是我不需要将
DataContext设置为这些类实例吗? -
@JonathanWood 如果绑定可以在给定对象上找到给定属性,您不认为它也可以找到它找到该属性的对象吗?放弃借用的麻烦,写一些琐碎的代码来玩这些东西。你很快就会有很多真正的问题。
-
@EdPlunkett:说什么?它可以很好地找到对象。我的问题是关于传播通知。这一定很常见,我正在尝试了解人们如何处理它。如果你的目的是批评而不是帮助,请不要回答我的问题。
-
@JonathanWood。目的。哪一个。拥有。这。财产。是。什么。它。得到。这。通知。从。除非您搞砸并忽略正确实施 INotifyPropertyChanged。为什么要传播通知?为什么要增加不必要的复杂性?