WPF - 为Collection中的项动态实例化ViewModel

时间:2013-11-13 07:18:52

标签: c# wpf mvvm

我有两个模型 - 一个是'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
{
}

1 个答案:

答案 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属性。