2015-01-25 4 views
-1

Как проверить все флажки в списке?C# Как проверить все флажки в listview

ListView XAML:

<ListView x:Name="List" HorizontalAlignment="Left" Height="559" Margin="10,10,0,0" VerticalAlignment="Top" Width="607" Grid.ColumnSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Auto" IsMouseCapturedChanged="List_IsMouseCapturedChanged"> 
     <ListView.ContextMenu> 
      <ContextMenu> 
       <MenuItem Name="Dodaj" Header="Dodaj" Click="DodajUtwor_Click"/> 
       <MenuItem Name="Usuń" Header="Usuń Zaznaczone" Click="UsuńUtwór_Click"/> 
       <MenuItem Name="Clear" Header="Wyczyść Listę" Click="ClearList_Click"/> 
       <MenuItem Name="Check" Header="Zaznacz Wszystkie" Click="SelectAll_Click"/> 
      </ContextMenu> 
     </ListView.ContextMenu>    
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="30" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <CheckBox Name="CheckBox" Padding="10" IsChecked="{Binding IsChecked}"/>       
           <TextBlock Text="{Binding Data}"/> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Nazwa Pliku" Width="100" DisplayMemberBinding="{Binding Nazwa}" /> 
       <GridViewColumn Header="Tytuł" Width="100" DisplayMemberBinding="{Binding Tytuł}"/> 
       <GridViewColumn Header="Wykonawca" Width="100" DisplayMemberBinding="{Binding Autor}"/> 
       <GridViewColumn Header="Album" Width="100" DisplayMemberBinding="{Binding Album}"/> 
       <GridViewColumn Header="Nr" Width="100" DisplayMemberBinding="{Binding Nr}"/> 
       <GridViewColumn Header="Rok" Width="100" DisplayMemberBinding="{Binding Rok}"/> 
       <GridViewColumn Header="Gatunek" Width="100" DisplayMemberBinding="{Binding Gatunek}"/> 
       <GridViewColumn Header="Komantarze" Width="100" DisplayMemberBinding="{Binding Komentarze}"/> 
       <GridViewColumn Header="Okładka" Width="100" DisplayMemberBinding="{Binding Okładka}"/> 
       <GridViewColumn Header="Lokalizacja" Width="100" DisplayMemberBinding="{Binding Lokalizacja}"/> 
      </GridView> 
     </ListView.View> 

    </ListView> 

Код:

private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      MyItem selectedItem = (MyItem)this.List.SelectedItem; 
      selectedItem.IsChedked = true; 
      List.Items.Refresh(); 


     } 

Не работает. Я хочу изменить все флажки на true в listviev. Я не знаю, как использовать loop foreach. И как удалить элементы с помощью флажков на true?

+2

Задайте свойства 'IsChecked' на привязанных элементах к' true'. – Jon

+1

Или измените '{Binding IsChecked}' на 'true', если вы хотите игнорировать базовые значения. Непонятно, что вы пытаетесь сделать. Можете ли вы добавить более подробную информацию? _ (BTW, это XAML, а не XML) _ –

ответ

0

Я думаю, вы можете найти флажок в столбце заголовка и выбрать все элементы сетки, когда выбран флажок заголовка.

Мы можем сделать это, имея простые режимы просмотра детей/подкатегорий. Ниже код может помочь/решить вашу проблему.

Xaml/Просмотр кода -

<GridViewDataColumn DataMemberBinding="{Binding IsChecked}" > 
      <GridViewDataColumn.Header > 
       <CheckBox HorizontalAlignment="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewDataControl}} 
               ,Path=DataContext.CheckAll}" 
         Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewDataControl}} 
               ,Path=DataContext.CheckAllCommand}" 
         CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" /> 
      </GridViewDataColumn.Header> 
      <GridViewDataColumn.CellTemplate> 
       <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
         <CheckBox Name="CheckBox" Padding="10" IsChecked="{Binding IsChecked}" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewDataControl}} 
               ,Path=DataContext.ItemCommand}" CommandParameter="{Binding}"/> 
         <TextBlock Text=y"{Binding Data}"/> 
        </StackPanel> 
       </DataTemplate> 
      </GridViewDataColumn.CellTemplate> 
      </GridViewDataColumn> 

и вы можете иметь ваши модели посмотреть, как описано ниже.

class MainViewModel : Common.UserInterface.ViewModelBase, IDisposable 
{ 
    public MainViewModel() 
    { 
     CheckAllCommand = new DelegateCommand<bool>(OnCheckAllExecuted); 
    } 

    void OnCheckAllExecuted(bool status) 
    { 
     // Your logic goes here (if any)  
     CheckAll = items.All(item => item.IsChecked); 
    } 

    public DelegateCommand<ItemViewModel> ItemCommand { get; private set; } 

    private bool checkAll; 
    private ObservableCollection<ItemViewModel> items; 

    public DelegateCommand<bool> CheckAllCommand 
    { 
     get; 
     private set; 
    } 

    public ObservableCollection<ItemViewModel> Items 
    { 
     get 
     { 
      return items; 
     } 
     set 
     { 
      items = value; 
      OnPropertyChanged(() => Items); 
     } 
    } 


    public bool CheckAll 
    { 
     get { return checkAll; } 
     set 
     { 
      checkAll = value; 
      OnPropertyChanged(() => CheckAll); 
     } 
    } 
} 

class ItemViewModel : ViewModelBase 
{ 
    public bool ischecked; 
    public string data; 

    public new bool IsChecked 
    { 
     get { return isChecked; } 
     set 
     { 
      isChecked = value; 
      OnPropertyChanged("IsChecked"); 
     } 
    } 

    public string Data 
    { 
     get { return data; } 
     set 
     { 
      data = value; 
      OnPropertyChanged("Data"); 
     } 
    } 
} 
Смежные вопросы