我已阅读this very related question here on SO,由于答案中的链接,它非常有用。我现在只是遇到了一个问题,即使采用MVVM模式也可以使用它。
假设我有我的ViewModel,它(或者甚至模型)可以定义一个枚举:
public enum MyTypes { Type1, Type2, Type3 };
我想在GUI中将其数据绑定到ComboBox。根据这篇文章,我将使用ObjectDataProvider来调用MyTypes上的Enum.GetValues()方法。所以我必须将MyTypes作为MethodParameter传递。但你怎么通过这种类型?我尝试了各种方法,比如在XAML中添加对命名空间的引用:
<Window.Resources>
<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="TipHandlingValues">
<ObjectDataProvider.MethodParameters>
<!-- what goes here? it's totally wrong. -->
<my:MyTypes />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
我放在那里的任何东西都会编译。有谁知道如何克服这个小障碍?
答案 0 :(得分:4)
最简单的方法是在代码中添加以下行:
DataContext = Enum.GetValues(typeof(MyTypes));
其他选项是添加标记扩展,从而生成枚举值列表。
答案 1 :(得分:4)
请参阅我在这篇SO帖子上的回答:How to declare combobox itemTemplate that has Itemsource as Enum Values in WPF?
简而言之,在ObjectDataProvider.MethodParameters中应引用名称空间中引用的Enum类型名称,即
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="my:MyTypes"/>
</ObjectDataProvider.MethodParameters>