隐藏组合框项目

时间:2018-11-09 11:21:33

标签: wpf xaml combobox itemtemplate

我正在使用一个填充有一些用户级别的组合框:

full list

我还使用Converter来检查Userlevel是否可见。 转换器工作正常。但是这些项目仍在列表中,仅是空的:

filtered list

我在组合框内使用TextBlock来显示文本。 这是我的代码:

<ComboBox x:Name="UserlevelComboBox" Width="300" Height="50"
               ItemsSource="{Binding Path=UserlevelList}"
               SelectedValue="{Binding Userlevel.Id}"
               SelectedValuePath="Id"
               SelectedItem="{Binding Userlevel}"
               IsSynchronizedWithCurrentItem="True">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=Userlevel, Converter={StaticResource userlevelConverter}}" Value="False">
                                <Setter Property="Visibility" Value="Collapsed"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

是否可以使“组合框项目”看起来像这样:

enter image description here

非常感谢。最好的问候

1 个答案:

答案 0 :(得分:1)

目前,您仅隐藏TextBlocks。但是在ComboBox中,项目包装在容器项目中-ComboBoxItem-仍然可见。

在ComboBox.ItemContainerStyle中应用DataTrigger。:

<ComboBox x:Name="UserlevelComboBox" Width="300" Height="50"
               ItemsSource="{Binding Path=UserlevelList}"
               SelectedValue="{Binding Userlevel.Id}"
               SelectedValuePath="Id"
               SelectedItem="{Binding Userlevel}"
               IsSynchronizedWithCurrentItem="True">
    <ComboBox.ItemContainerStyle>

        <Style TargetType="{x:Type ComboBoxItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Userlevel, Converter={StaticResource userlevelConverter}}" Value="False">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>

    </ComboBox.ItemContainerStyle>
</ComboBox>