仅在选中且不为空时才显示元素
Posted
技术标签:
【中文标题】仅在选中且不为空时才显示元素【英文标题】: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)?
谢谢
【问题讨论】:
【参考方案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.0 的HasItems
属性
并反转条件:默认可见,未选中或没有项目时折叠。未经测试的航空代码:
<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>
【讨论】:
以上是关于仅在选中且不为空时才显示元素的主要内容,如果未能解决你的问题,请参考以下文章
Laravel/Eloquent/DB 查询 - 当为空且不为空时加入