2016-06-29 3 views
0

Есть ли способ скрыть элементы combobox в WPF? В моем usercontrol есть ListBox с элементами checkbox, привязанными к ObservableCollection и datagrid с помощью combobox.Как скрыть элементы combobox в 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 управлять элементами управления ComboBox и добавил свойство «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», чтобы скрыть/показать элемент в ComboBox. Может ли кто-нибудь сказать мне, как я могу это достичь?

ответ

1

Довольно просто: дать вещи COMBOBOX стиль с триггером, который устанавливает ComboBoxItem.Visibility в соответствии со значением IsSelected на ComboBoxItem «s DataContext:

<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 на любом из этих элементов после того, как ComboBoxes загружены в сетку, вам нужно будет implement INotifyPropertyChanged по адресу CBItem, чтобы пользовательский интерфейс отражал изменение.

+0

спасибо! Это круто :) –

 Смежные вопросы

  • Нет связанных вопросов^_^