Search code examples
wpfxamlcomboboxvisibilitytogglebutton

How to hide combobox toggle button if there is only one item?


I have a WPF application. In one window there is a combobox..and I want to hide the toggle button and disable the combo box if there is only one item.

How would I achieve this ?

I have tried the below code for hiding the toggle button. But of no luck

Any help would be appreciated. thanks

<ComboBox x:Name="CList" ItemsSource="{Binding Path=C}"  >                    
    <Style TargetType="{x:Type ToggleButton}" >
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
                <Setter Property="Visibility" Value="Hidden" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ComboBox>

Solution

  • The better solution is to replace the template of combo box with a control template(which only contain textblock) when the item count is zero.

    Here is the xaml for the same.

    <ComboBox Name="CList" ItemsSource="{Binding Path=C}" 
                         SelectedItem="{Binding Path=CC}" VerticalAlignment="Center" Margin="0,0,10,0" >
                        <ComboBox.Style>
                            <Style TargetType="{x:Type ComboBox}" >
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
                                        <Setter Property="Template">
                                            <Setter.Value>
                                                <ControlTemplate>
                                                    <TextBlock Text="{Binding Items[0], ElementName=CList}" />
                                                </ControlTemplate>
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ComboBox.Style>
                    </ComboBox>