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;(

有没有人已经遇到过这个问题或任何建议?

提前非常感谢。

MVVM绑定枚举值:大量代理属性

您可以尝试使用一个索引器属性,该属性返回相应的数据

public IList this[DataEnum type]
{
     return _model.GetData(type);
}

然后使用将其绑定

ItemsSource="{Binding [Gadgets]}"