我有两个模型 - 一个是'Field',另一个是'Layout',它又是Field的集合。我使用它们来实现树结构。我试图避免为布局实现ViewModel,只是为了避免必须导航到树上的每个节点,并避免另一个间接推送后台更新。但我必须为集合中的项目(字段)创建一个ViewModel。这可能不破坏MVVM模式吗?
我实际上想的是像'Field'上的扩展属性,我可以在View中使用它进行绑定,但经过一些分析后发现that is not possible。在这种情况下是否还有其他可用的技术?
// Model
public interface IField
{
string Name { get; set; }
string Type { get; set; }
}
public interface ILayout : ICollection<IField>, IField
{
}
答案 0 :(得分:0)
您不需要每种类型数据的视图模型。相反,您可以简单地在它们上实现INotifyPropertyChanged
接口。在我看来,每个视图模型都应该有一个视图,因此您需要一个视图模型,其中包含要在TreeView
中显示的对象集合。定义像这样的类的标准方法是这样的:
public class Item : INotifyPropertyChanged
{
public string Name { get; set; } // Implement INotifyPropertyChanged
public string Type { get; set; } // correctly on all of these properties
public ObservableCollection<Item> Items { get; set; }
}
然后,您的视图模型至少具有ObservableCollection<Item> Items
属性Bind
,且TreeView.ItemsSource
属性。