2012-01-16 57 views
0

我正在写一个ViewModel库,它与我的WPF自定义控件一起工作。 我的问题是,我的DomainModel有大量的数据类型: Cd,笔,小工具,书籍,ecc。 所有这些数据类型都枚举枚举(我有或多或少的100个数据类型),并且每个数据类型对应于一个数据库表。MVVM绑定枚举值:很多代理属性

所以这个想法是有一个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中为每个枚举值指定一个属性,但是我想避免放置1百个属性访问器。我很懒,这可能很容易出错。我知道在c#4中我们有动态属性,所以用这种方法我可以避免写100个属性访问器,但是我必须使用没有动态属性的.net 3.5,我不能使用.net 4;(

是否有任何人谁已经有这个问题或任何建议?

非常感谢提前。

+0

如果你很懒,那么你是如何结束这个域设计的? – flq 2012-01-16 19:02:41

+0

为什么您的ViewModel需要100个对象集合?的ViewModels应反映查看,因此,如果你的'GadgetsView'只包含小工具组合框,视图模型应该只有一个'的ObservableCollection ''不的ObservableCollection','的ObservableCollection '等 – Rachel 2012-01-16 19:05:33

+0

我应该把一个属性为每个数据类型,因为我正在编写视图模型库。这是一个使用我的数据基础架构编写应用程序的API。我无法知道哪些数据需要使用我的API的每个应用程序。 – user1070316 2012-01-16 19:10:04

回答

2

你可以尝试使用它返回相应数据

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

然后绑定一个索引属性它使用的是:

ItemsSource="{Binding [Gadgets]}" 
+0

*叹*,打我。我的方法也是如此。 – flq 2012-01-16 19:04:39

+0

@flq至少这意味着它可能不是这样一个奇特的想法:) – 2012-01-16 19:06:56

+0

Wooow,我不认为有可能绑定索引器属性!非常感谢你。这似乎是目前最好的方法。 – user1070316 2012-01-16 19:32:05