【问题标题】:Show element only when selected and only when is not empty仅在选中且不为空时才显示元素
【发布时间】:2021-09-27 23:15:51
【问题描述】:

我的情况与此问题类似: Displaying Content only when ListViewItem is Selected

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

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)?

谢谢

【问题讨论】:

    标签: wpf xaml datatrigger


    【解决方案1】:

    要设置两个触发器。 而条件正好相反。 由于触发器仅检查相等性,因此您可以将 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>
    

    【讨论】:

      【解决方案2】:

      您可以评估组合框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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 2016-08-24
        • 2022-09-23
        • 2015-05-17
        相关资源
        最近更新 更多