如何在WPF中隐藏组合框的项
有没有办法在WPF中隐藏组合框的项目? 在我的usercontrol中,有一个列表框,其中包含绑定到ObservableCollection的复选框项,以及一个带有combobox的数据网格如何在WPF中隐藏组合框的项,wpf,xaml,combobox,visibility,Wpf,Xaml,Combobox,Visibility,有没有办法在WPF中隐藏组合框的项目? 在我的usercontrol中,有一个列表框,其中包含绑定到ObservableCollection的复选框项,以及一个带有combobox的数据网格 <ListBox x:Name="AvailableAttributes" Grid.Row="0" Grid.Column="2" SelectionMode="Single" > <ListBox.ItemContainerStyle> <Style
<ListBox x:Name="AvailableAttributes" Grid.Row="0" Grid.Column="2" SelectionMode="Single" >
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=OneWay}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
...
<DataGrid Name="datagrid" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" />
<DataGridComboBoxColumn
SelectedValueBinding="{Binding CBID}"
DisplayMemberPath="Name"
SelectedValuePath="ID">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource"
Value="{Binding Path=CBItems, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource"
Value="{Binding Path=CBItems, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
现在我想使用'IsSelected'属性隐藏/显示组合框中的项。有人能告诉我如何实现这一点吗?非常简单:只需为combobox项提供一个带有设置ComboBoxItem的触发器的样式。根据ComboBoxItem的DataContext上IsSelected的值的可见性:
如果在组合框加载到网格中后,您可能会更新这些项中任何一项的IsSelected值,那么您将需要更新CBItem,以便UI反映更改 非常简单:只需为combobox项提供一个带有设置ComboBoxItem的触发器的样式。根据ComboBoxItem的DataContext上IsSelected的值的可见性:
如果在组合框加载到网格中后,您可能会更新这些项中任何一项的IsSelected值,那么您将需要更新CBItem,以便UI反映更改 如果要显示特定属性并根据另一个属性值筛选出项,则应同时使用ItemTemplate和ItemContainerStyle。 在此示例中,ItemSource已设置为ObservableCollection类型属性,该属性是另一个Combobox ItemSource的一部分
如果要显示特定属性并根据另一个属性值筛选出项,则应同时使用ItemTemplate和ItemContainerStyle。 在此示例中,ItemSource已设置为ObservableCollection类型属性,该属性是另一个Combobox ItemSource的一部分
非常感谢你!这太棒了:非常感谢!这太棒了:
public class GridItem
{
public string Name { get; set; }
public int CBID { get; set; }
}
public class CBItem
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
}
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="ItemsSource"
Value="{Binding Path=CBItems, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
</Style>
<ComboBox x:Name="combo2" ItemsSource="{Binding SelectedItem.Devices,ElementName=combo1}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding DeviceId}" Value="125">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>