MVVM绑定枚举值:许多代理属性

时间:2012-01-16 18:55:32

标签: c# wpf xaml data-binding itemssource

我正在编写一个可与​​我的WPF自定义控件一起使用的ViewModel库。 我的问题是我的DomainModel有大量的数据类型: 镉,笔,小配件,书籍,ECC。 所有这些数据类型都使用枚举枚举(我有或多或少有100个数据类型),每个数据类型对应一个数据库表。

因此,我们的想法是拥有一个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;(

是否有人已经遇到过此问题或任何建议?

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

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

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

然后使用它绑定它:

ItemsSource="{Binding [Gadgets]}"