我想设计一个组合框,它能够禁用其中的组合框项(绑定到可观察的集合)。 我知道这不是最佳的UI策略,但我的模块需要它。
答案 0 :(得分:1)
我认为你的模型看起来像这样:
public class Model
{
public string Text { get; set; }
public bool Enabled { get; set; }
}
为了演示的目的,我将手动进行绑定:
theComboBox.ItemsSource = new ObservableCollection<Model>{
new Model{Text="One", Enabled=true},
new Model{Text="Two", Enabled=false},
new Model{Text="Three", Enabled=true}
};
您需要做的就是修改ComboBoxItem样式并将IsEnabled属性绑定到模型中的Enable字段:
<ComboBox Name="theComboBox" DisplayMemberPath="Text" Margin="26,28,302,270">
<ComboBox.Resources>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="IsEnabled" Value="{Binding Enabled}"/>
</Style>
</ComboBox.Resources>
</ComboBox>
显然,如果您的模型中没有“已启用”字段,则您需要使用转换器或其他内容。
答案 1 :(得分:0)
您可以看到此link
或只是尝试此代码
<ComboBox ItemTemplate="{StaticResource IpInfoTemplate}"
ItemsSource="{Binding Source={x:Static WpfApplication1:App.IpInfoList}, Mode=OneWay}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="IsEnabled" Value="{Binding Enabled}"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
<ComboBox ItemTemplate="{StaticResource IpInfoTemplate}"
ItemsSource="{Binding Source={x:Static WpfApplication1:App.IpInfoList}, Mode=OneWay}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="IsEnabled" Value="{Binding Enabled}"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>