2016-06-29 46 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

非常感謝!這太棒了 :) –