wpf 如果目标ItemsSource为空,如何在组合框中显示“无项目”内容?

szqfcxe2  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(296)

我正在尝试创建一个带有可更新集合的组合框。如果集合绑定到组合框为空,我将在组合框内显示特殊内容。
我曾尝试设置TargetNullValue参数,但它的显示内容不是我所期望的。

<ComboBox ItemsSource="{Binding MyCollection, UpdateSourceTrigger=PropertyChanged, TargetNullValue='No Items'}"/>

我现在拥有的

我的期望

zbdgwd5y

zbdgwd5y1#

您可以在ComboBox的Template没有项时替换它,例如,使用TextBlock或任何其他可视元素。

<ComboBox>
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="HasItems" Value="False">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ComboBox">
                                <TextBlock Text="No Items"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>
au9on6nz

au9on6nz2#

试试这个(我不能自己检查--我“手边”没有电脑):

<ComboBox>
    <ComboBox.Resources>
        <CompositeCollection x:Key="noItems">
            <sys:String>No Items</sys:String>
        </CompositeCollection>
    </ComboBox.Resources>
  
    <ComboBox.Style>
        <Style TergetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding MyCollection}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyCollection.Count}"
                             Value="0">
                    <Setter Property="ItemsSource" Value="{DynamicResource noItems}"/>
                    <Setter Property="SelectedIndex" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    <ComboBox.Style>
</ComboBox>

或TargetNullValue的此类变量:

<ComboBox>
    <ComboBox.ItemsSource>
        <Binding Path="MyCollection">
            <Binding.TargetNullValue>
                <CompositeCollection>
                    <sys:String>No Items</sys:String>
                </CompositeCollection>
            </Binding.TargetNullValue>
        </Binding>
    </ComboBox.ItemsSource>
</ComboBox>

相关问题