2016-06-29 44 views
0

有没有办法隐藏WPF中的组合框项目? 在我的用户控件中有一个ListBox,其中复选框项绑定到一个ObservableCollection和一个带有组合框的数据网格。如何隐藏WPF中的组合框项目

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

我以前this solution管理组合框的项目,并添加属性“IsSelected”

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

现在我想用“IsSelected”属性来隐藏/在组合框中显示的项目。有人能告诉我,我怎么能做到这一点?

回答

1

很简单:只要给组合框项与根据IsSelected的值设置ComboBoxItem.Visibility触发器的风格ComboBoxItemDataContext

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

如果你要永远更新的IsSelected值在组合框加载到网格中后,您需要在CBItem上使用implement INotifyPropertyChanged,以便用户界面反映更改。

+0

非常感谢!这太棒了 :) –