MVVM绑定枚举值:大量代理属性
本文关键字:代理 属性 绑定 枚举 MVVM | 更新日期: 2023-09-27 18:20:22
我正在编写一个ViewModel库,它可以与我的WPF自定义控件一起使用。我的问题是我的DomainModel有大量的数据类型:Cd,钢笔,小工具,书籍,等等。所有这些数据类型都是用枚举枚举的(我有大约100个数据类型),每个数据类型都对应于一个DB表。
因此,我们的想法是有一个ViewModel库,它为每个数据类型公开一个属性,这样我的UI控件就可以直接绑定我的ViewModel的属性。每个属性的viewModel都返回一个ObservableCollection。例如,如果我想用"小工具"数据填充我的组合框,在我的XAML中,我会有这样的东西:
<my:XCombo ItemsSource="{Binding Gadgets}" .... />
在我的ViewModel中,我会有:
public ObservableCollection<Gadgets> Gadgets
{
get
{
//get gadgets data from my domain model
return _model.GetData(DataEnum.Gadgets);
}
}
现在,为了做到这一点,我需要在ViewModel中为每个枚举值设置一个属性,但我希望避免设置100个属性访问器。我很懒,这很容易出错。我知道,在c#4中,我们有动态属性,所以这样我可以避免编写100个属性访问器,但我必须使用没有动态属性的.net 3.5,我不能使用.net 4;(
有没有人已经遇到过这个问题或任何建议?
提前非常感谢。
您可以尝试使用一个索引器属性,该属性返回相应的数据
public IList this[DataEnum type]
{
return _model.GetData(type);
}
然后使用将其绑定
ItemsSource="{Binding [Gadgets]}"