我知道已经有很多做类似事情的例子,我已经读过这些但是无法弄清楚为什么我的实现不起作用。
当ComboBoxA设置为值X时,我试图禁用ComboBoxB。通过此实现,无论在ComboBoxA中选择的值如何,ComboBoxB始终都会启用。
ComboBoxA:
<ComboBox Name="ComboBoxA">
<ComboBoxItem Name="X">X</ComboBoxItem>
<ComboBoxItem Name="Y">Y</ComboBoxItem>
</ComboBox>
ComboBoxB:
<ComboBox Name="ComboBoxB">
<ComboBoxItem Name="Something">Something</ComboBoxItem>
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
答案 0 :(得分:0)
您从未对ComboboxA进行过数据绑定。
您的引用元素名称“ComboboxA”而非“ComboboxB”
你有:
<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxB}" Value="X">
这应该是:
<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X">
<ComboBox Name="ComboBoxB">
<ComboBoxItem Name="Something">Something</ComboBoxItem>
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
答案 1 :(得分:0)
您可以使用转换器执行此操作。
public class SelectedItemToDisable : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
var val = (value as ComboBoxItem).Content;
if (val.ToString() == "X") //may be its not string, some object type
return false;
}
return true;
}
在Xaml中的资源部分定义转换器。
<local:SelectedItemToDisable x:Key="DisableConverter"/>
<ComboBox Name="ComboBoxA">
<ComboBoxItem Name="X">X</ComboBoxItem>
<ComboBoxItem Name="Y">Y</ComboBoxItem>
</ComboBox>
<ComboBox Name="ComboBoxB" IsEnabled="{Binding Path=SelectedItem, ElementName=ComboBoxA, Converter={StaticResource DisableConverter}}">
<ComboBoxItem Name="Something">Something</ComboBoxItem>
</ComboBox>
希望这有帮助。