【问题标题】:Binding WPF ComboBox to enum and hiding certain values将 WPF ComboBox 绑定到枚举并隐藏某些值
【发布时间】:2014-01-26 16:28:08
【问题描述】:

我有一个 WPF 组合框,它绑定到这样的枚举:

<Window.Resources>
    <local:EnumDescriptionConverter x:Key="enumDescriptionConverter"/>
    <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="cityNamesDataProvider">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:MyModel+CityNamesEnum"/>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>

<ComboBox x:Name="cityNameComboBox" ItemsSource="{Binding Source={StaticResource cityNamesDataProvider}}" SelectionChanged="cityNameComboBox_SelectionChanged">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我绑定的枚举具有描述属性,如下所示:

public enum CityNamesEnum
{
    [Description("New York City")]
    NewYorkCity,
    [Description("Chicago")]
    Chicago,
    [Description("Los Angeles")]
    LosAngeles
}

我并不总是想显示每个枚举值。是否可以切换一个或多个枚举值的可见性?如果这些是 ComboBoxItems,我想我可以简单地将 .Visibility 属性设置为隐藏,但由于它们是枚举值,我不确定这是否可能。有人知道吗?

【问题讨论】:

    标签: wpf binding combobox enums


    【解决方案1】:

    为什么不创建一个普通的 C# 方法来为您进行过滤,然后让 ObjectDataProvider 指向该方法呢

    static method IEnumerable<CityNamesEnum> MyFilter() {
      yield return CityNames.NewYorkCity;
      yield return CityNames.Chicago;
    }
    

    XAML

    <ObjectDataProvider 
       MethodName="MyFilter" 
       ObjectType="{x:Type local:TheType}" 
       x:Key="cityNamesDataProvider">
    </ObjectDataProvider>
    

    【讨论】:

    • 谢谢,这是个好建议。我实际上需要根据另一个组合框中的选定项过滤此特定组合框的枚举值。我会看看如何将您的想法应用到该解决方案中。
    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多