我遇到了MVVM的设计问题。
我想以树的方式制作通用模型(简化):
public class ModelElement : ViewModelBase, IModelElement
{
private ValueWarper ValueProperty;
public ValueWarper Value
{
get { return ValueProperty; }
set { ValueProperty = value; RaisePropertyChanged(() => Value); }
}
private ObservableCollection<IModelElement> ChildrenProperty;
public ObservableCollection<IModelElement> Children
{
get { return ChildrenProperty; }
set { ChildrenProperty = value; RaisePropertyChanged(() => Children); }
}
private IModelElement ParentProperty;
public IModelElement Parent
{
get { return ParentProperty; }
set { ParentProperty = value; RaisePropertyChanged(() => Parent); }
}
}
然后在我的ViewModel中我有这个属性:
private ObservableCollection<IModelElement> ListElementProperty;
public ObservableCollection<IModelElement> ListElement
{
get { return ListElementProperty; }
set { ListElementProperty= value; RaisePropertyChanged(() => ListElement);}
}
每个ModelElement
都对视图中的控件具有约束力(TextBox
,DatePicker
,Label
等等......)
视图中的绑定非常糟糕,我想改变它。我知道这不是一个可行的解决方案。
所以现在有一些方法可以达到我想要的效果: 通过将模型包装在ViewModel中来展平模型:好的......但是,如果我有10个级别呢?我要构建10个viewModels?...
为ObservableDictionnary
的子项构建类似于ObservableCollection
而不是ModelElement
的内容,如果键是精心选择的字符串,则在绑定视图中会更容易理解。
其他方式?任何想法?我的目标是在视图中使绑定不要太繁琐,保持简单灵活......