我有一个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;
}
在运行时没有工作和错误,因为该项是字符串而不是组合项。
答案 0 :(得分:1)
您的代码无效,因为每个项目都是代表enJobStatus
名称的字符串,但是,如评论中所述,您可以为ItemsContainerStyle
创建自定义ComboBoxItem
并绑定{{通过自定义IsEnabled
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
}
以使其更具可自定义性,并可选择将其他参数传递到转换器