2015-01-25 5 views
-1

listview의 모든 확인란을 선택하는 방법은 무엇입니까?C# 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(); 


     } 

이 작동하지 마십시오. listviev에서 모든 체크 박스를 true로 변경하고 싶습니다. loop foreach를 사용하는 방법을 모른다. 그리고 마녀 체크 박스를 지우는 방법은 사실입니까?

+2

바인딩 된 항목의 'IsChecked'속성을 'true'로 설정하십시오. – Jon

+1

기본 값을 무시하려면'{Binding IsChecked}'를'true'로 변경하십시오. 당신이하려는 일이 불분명합니다. 자세한 내용을 추가 할 수 있습니까? _ (BTW, XML이 아닌 XAML) _ –

답변

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"); 
     } 
    } 
} 
관련 문제