在WPF中清除组合框

时间:2018-02-23 12:13:05

标签: wpf xaml data-binding

我有一个Combobox,只要选中复选框,我想清除它。 我该怎么做呢?

我的组合框:

<ComboBox
   DisplayMemberPath="KommuneNavn"
   SelectedValuePath="KommuneNr"
   ItemsSource="{Binding KommuneNavne}"
   SelectedValue="{Binding kommuneNr, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
   Margin="3"
   IsEnabled="{Binding IsUdenlandskAdresse, Converter={StaticResource BooleanNotConverter}}"/>

我的Checkbox绑定到我的viewmodel中的布尔属性IsUdenlandskAdresse

<CheckBox Margin="3" IsChecked="{Binding IsUdenlandskAdresse, Mode=TwoWay}"/>

因此当IsUdenlandskadresse设置为true时,我希望组合框变为空白。

2 个答案:

答案 0 :(得分:3)

如果我理解您要正确执行的操作,则在禁用时,您希望ComoBox为空(或至少看起来为空白)。最简单的方法是在使用样式禁用ComboBox时将Foreground(用于文本的颜色)更改为Transparent。这样您就不需要任何代码隐藏,可以在其他ComboBox上重用该行为,如果重新启用它,您不会丢失选择。

<Style TargetType="ComboBox">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="Transparent"/>
        </Trigger>
    </Style.Triggers>
</Style>

简约演示:

enter image description here

<ComboBox Height="Auto" IsEnabled="{Binding ElementName=cckEnabled, Path=IsChecked}">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="Transparent"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
    <ComboBoxItem>Entry 1</ComboBoxItem>
    <ComboBoxItem>Entry 2</ComboBoxItem>
    <ComboBoxItem>Entry 3</ComboBoxItem>
    <ComboBoxItem>Entry 4</ComboBoxItem>
    <ComboBoxItem>Entry 5</ComboBoxItem>
</ComboBox>
<CheckBox Name="cckEnabled" Content="Enabled"/>

答案 1 :(得分:0)

清除您的ComboBox(从ItemsSource中移除所有可选择的项目):

public bool IsUdenlandskAdresse
{
   get { return _isUdenLandskAdresse; }
   set 
   { 
     SetProperty(ref _isUdenLandskAdresse, value); 
     // this will clear your collection if value=true
     if(value)
       KommuneNave.Clear();
   }
}

如果要取消选择SelectedItem:

public bool IsUdenlandskAdresse
{
   get { return _isUdenLandskAdresse; }
   set 
   { 
     SetProperty(ref _isUdenLandskAdresse, value); 
     // just set the SelectedItem BindingTarget to null
     if(value)
       kommunenr = null;
   }
}