仅在选中且仅在不为空时显示元素

Show element only when selected and only when is not empty

我和这个问题的情况类似: Displaying Content only when ListViewItem is Selected

我有一个 ComboBox,我只想在包含它的 ListViewItem 被选中时以及 ComboBox 不为空时显示(这两个条件都必须为真)。将可见性绑定到只读 属性 非常容易,它检查 ViewModel 中的 ItemsSource 属性 是否有任何项目,并且通过上面的 link 也解决了如何只显示它当它的 ListViewItem 被选中时,但我无法加入这两个条件。如何仅在项目被选中且组合不为空时显示组合框?

ComboBox 中的此样式具有仅在选中时显示的技巧:

<ComboBox ItemsSource="{Binding DataContext.ListaPedidosPendientes, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" DisplayMemberPath="numero">
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                    AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

如何添加第二个条件 (ListaPedidosPendientes.Count > 0)?

谢谢

您可以评估 ComboBox https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.itemscontrol.hasitems?view=net-5.0HasItems 属性 并反转条件:默认可见,未选中或没有项目时折叠。未经测试的航空代码:

<ComboBox ItemsSource="{Binding DataContext.ListaPedidosPendientes, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" DisplayMemberPath="numero">
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                    AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
                <Trigger Property="HasItems" Value="False">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

有两个触发器要设置。 而且条件相反。 由于触发器仅检查相等性,因此您可以将 Items.Count 与零进行比较。 但是不能检查条件>0。

<ComboBox ItemsSource="{Binding DataContext.ListaPedidosPendientes, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" DisplayMemberPath="numero">
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
                    AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Items.Count}" Value="0">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>