如何基于枚举列表禁用组合框

时间:2016-03-20 19:00:10

标签: wpf combobox enums

我有一个wpf app c#。

我有一个由枚举填充的组合框。

我希望,例如禁用第1或第3(等)项。

这是我的标记:

<ComboBox x:Name="cboJobStatus" />

我的枚举:

public enum enJobStatus
{
    Draft = 0,
    Booked = 1,
    Started = 2,
    OnHold = 3,
    Completed = 4,
    Paid = 5,
    All = 6
}

我的代码:

cboJobStatus.ItemsSource = Enum.GetNames(typeof(enJobStatus));

我可怜的尝试让这个工作:

foreach (var item in cboJobStatus.Items)
{
    ((ComboBoxItem)item).IsEnabled = false;
}

在运行时没有工作和错误,因为该项是字符串而不是组合项。

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为每个项目都是代表enJobStatus名称的字符串,但是,如评论中所述,您可以为ItemsContainerStyle创建自定义ComboBoxItem并绑定{{通过自定义IsEnabled

1}}到您当前的DataContext(在您的情况下为字符串值)
IValueConverter

并在转换器中决定要禁用/启用哪些值

<ComboBox x:Name="cboJobStatus">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Setter Property="IsEnabled" Value="{Binding Path=., Converter={StaticResource EnabledConverter}}"/>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

给定示例仅启用 Draft 值,但您还可以合并public class EnabledConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (string)value == "Draft"; } //removed content } 以使其更具可自定义性,并可选择将其他参数传递到转换器