В WPF, как определить шаблон данных в случае enum? - PullRequest
4 голосов
/ 14 марта 2010

Enum определен как Type

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

Теперь я связываю Тип с раскрывающимся меню «Элемент управления ленты» в элементе управления ленты, которое отображает каждое меню с именем меню с соответствующим изображением.

(я использую Syncfusion Ribbon Control).

Я хочу, чтобы для каждого типа перечисления (например, OneType) был определен шаблон данных с именем меню и соответствующим изображением.

Как я могу определить шаблон данных enum?

Пожалуйста, предложите мне решение, если это возможно !!

Пожалуйста, также скажите мне, если это невозможно, или я думаю в неправильном направлении !!

Ответы [ 3 ]

13 голосов
/ 14 марта 2010

Один из способов сделать это - создать DataTemplateSelector и присвоить его свойству ItemTemplateSelector меню. В коде DataTemplateSelector вам просто нужно вернуть DataTemplate на основе значения enum

12 голосов
/ 13 января 2012

Не уверен, подходит ли это решение для вашей конкретной ситуации, но оно относится к вопросу DataTemplate для enum. Можно создать один 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 голосов
/ 14 марта 2010

Очень часто люди используют перечисления, когда им следует использовать полиморфизм. Вы должны, по крайней мере, проверить, является ли это одним из таких случаев. Наличие в коде вашего класса блоков switch, которые проверяют значение перечисления экземпляра, часто является признаком того, что это хорошая идея. Если вы можете исключить перечисление путем определения подклассов, то вам не нужно возиться с подобными селекторами шаблонов данных и преобразователями значений.

...