在WPF中如何在枚举的情况下定义数据模板?

时间:2010-03-14 10:58:31

标签: wpf data-binding xaml enums

我将Enum定义为Type

public Enum **Type**
{
   OneType,
   TwoType,
   ThreeType
};

现在,我将键入绑定到功能区控件中的下拉功能区控件下拉菜单,该控件显示带有相应图像的MenuName的每个菜单。

(我正在使用Syncfusion Ribbon Control)。

我希望每个枚举类型(OneType)都定义了具有菜单名称和腐蚀图像的数据模板。

如何定义枚举的数据模板?

如果有可能,请建议我解决方案!!

请告诉我,如果不可能,或者我在想错误的方向!!

3 个答案:

答案 0 :(得分:13)

一种方法是创建DataTemplateSelector,并将其分配给菜单的ItemTemplateSelector属性。在DataTemplateSelector的代码中,您只需根据枚举值返回DataTemplate

答案 1 :(得分:12)

不确定这是否适用于您的特定情况,但它与针对枚举的DataTemplate问题相关。可以为枚举类型创建一个DataTemplate,并使用DataTriggers调整该模板中各个枚举值的控件:

enum MyEnumType {
    ValueOne,
    ValueTwo,
}

<DataTemplate DataType="{x:Type MyEnumType}">
    <TextBlock x:Name="valueText"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueOne}">
            <Setter TargetName="valueText" Property="Text" Value="First Value" />
        </DataTrigger>
    </DataTemplate.Triggers>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Static MyEnumType.ValueTwo}">
            <Setter TargetName="valueText" Property="Text" Value="Second Value" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

答案 2 :(得分:2)

人们常常在使用多态时使用枚举。你应该至少检查一下这是否是其中一种情况。在类的代码中存在switch块来检查实例的枚举值,这通常表明这是一个好主意。如果你可以通过定义子类来消除枚举,那么你就不必乱用数据模板选择器和值转换器。