【问题标题】:How to bind a property to a static enum value?如何将属性绑定到静态枚举值?
【发布时间】:2015-06-26 21:54:46
【问题描述】:

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

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}} />

此时我没有数据对象,我只想以某种方式从转换器中选择颜色值,而不是在图例中硬输入它。无论如何我可以做到这一点吗?

【问题讨论】:

    标签: c# wpf enums


    【解决方案1】:

    我认为this Stack Overflow 帖子可能是您的答案。您必须在 xaml 的资源部分中列出您的枚举值,并将其键用作 StaticResource 键。

    【讨论】:

      【解决方案2】:

      使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2018-06-09
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        相关资源
        最近更新 更多