如何将属性绑定到静态枚举值

本文关键字:静态 枚举 绑定 属性 | 更新日期: 2023-09-27 18:00:14

我有一个具有各种值的枚举:

public enum UserStatus
{
    Active = 1,
    Inactive = 2,
    Invalid = 3,
    Blocked = 4,
    Pending = 5
}

在我的UI上,我为枚举的每个值分配一种颜色,由于它在各种窗口中使用,我为它创建了一个转换器

现在我想显示一些枚举值的图例,是否可以将静态枚举值绑定到WPF控件中的属性?

<!-- I want ? to be a fixed enum value -->
<TextBlock Text="{Binding ?, Converter={StaticResource=UserStatusToString}}" Foreground={Binding ?, Converter={StaticResource=UserStatusToBrush}} />

我现在没有数据对象,我只想从转换器中选择颜色值,而不是在图例中硬键入。有没有我能做到的?

如何将属性绑定到静态枚举值

我认为这篇Stack Overflow帖子可能就是你的答案。您必须在xaml的resources部分列出您的枚举值,并将其键用作StaticResource键。

使用ObjectDataProvider获取所有枚举值,然后使用ItemTemplate 在ListBox中显示它们

<Window xmlns:local="clr-namespace:FooApp" ... >
    <Window.Resources>
        <ObjectDataProvider x:Key="FooEnumValues" 
            MethodName="GetValues"
            ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:Foo" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding Source={StaticResource FooEnumValues}}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock 
    Text="{Binding Converter={StaticResource=UserStatusToString}}" 
    Foreground="{Binding Converter={StaticResource=UserStatusToBrush}}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>