Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF中隐藏组合框的项_Wpf_Xaml_Combobox_Visibility - Fatal编程技术网

如何在WPF中隐藏组合框的项

如何在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

有没有办法在WPF中隐藏组合框的项目? 在我的usercontrol中,有一个列表框,其中包含绑定到ObservableCollection的复选框项,以及一个带有combobox的数据网格

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