2011-08-04 43 views
1

Regards,WPF Datagrid - 我可以編程方式選擇組中的所有行嗎?

我有一個複選框列的DataGrid,允許用戶選擇行,列標題中的「全選」複選框和組標題中的「全選」複選框。

XAML:

<DataGrid x:Name="TablaDatos" 
      AutoGenerateColumns="False" 
      CanUserAddRows="False" 
      CanUserReorderColumns="True" 
      CanUserResizeColumns="True" 
      CanUserResizeRows="True" 
      CanUserSortColumns="True" 
      SelectionMode="Extended" 
      Grid.Row="2"> 
     <DataGrid.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Margin" Value="0,0,0,5"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <Expander IsExpanded="True"> 
             <Expander.Background> 
              <LinearGradientBrush> 
               <GradientStop Color="#A0FAFAFF" Offset="0.3" /> 
               <GradientStop Color="#FFAACAFF" Offset="1" /> 
              </LinearGradientBrush> 
             </Expander.Background> 
             <Expander.Header> 
              <DockPanel> 
               <CheckBox x:Name="ProyectoCHK" Margin="0 5 0 0" Click="ProyectoCHK_Click"></CheckBox> 
               <Label FontWeight="Bold" Content="{Binding Path=Name}" Width="200" Target="{Binding ElementName=ProyectoCHK}"/> 
               <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}" Margin="0 5 0 0"/> 
              </DockPanel> 
             </Expander.Header> 
             <Expander.Content> 
              <ItemsPresenter /> 
             </Expander.Content> 
            </Expander> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </DataGrid.GroupStyle> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.HeaderTemplate> 
        <DataTemplate> 
         <CheckBox/> 
        </DataTemplate> 
       </DataGridTemplateColumn.HeaderTemplate> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged}" Name="theCheckbox"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Id. Prueba" Binding="{Binding id_prueba}" SortDirection="Descending"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="VSAT" Binding="{Binding VSAT}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="PC" Binding="{Binding PC}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Fecha Evento" Binding="{Binding FechaUltimoEvento, StringFormat={}\{0:dd/MM/yyyy HH:mm:ss\}}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Estado" Binding="{Binding Estado}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Mensaje" Binding="{Binding Mensaje}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Fecha de creación" Binding="{Binding FechaCreacionPrueba}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Proyecto" Binding="{Binding PROYECTO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Departamento" Binding="{Binding DEPARTAMENTO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Municipio" Binding="{Binding MUNICIPIO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Localidad" Binding="{Binding LOCALIDAD}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Id. punto" Binding="{Binding IDENTIFICADOR_PUNTO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Usuario" Binding="{Binding UsuarioPrueba}"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

¿如何我可以選擇的所有複選框,一組中的行?

謝謝。

回答

0

中的複選框「ProyectoCHK」的經過時這樣做......(下面的代碼可能需要改進)

  1. ProyectoCHK視覺兄弟是被綁定到Name屬性GroupStyle一個標籤。訪問並將其內容複製到變量中,並顯示「GroupValue」。

  2. 假設您已將您的DataGrid綁定到CollectionView,當發生分組時,您將有GroupDescription

因此,訪問會給你GroupedPropertyName在哪個分組發生。然後您可以使用

 var items = DataGrid.ItemsSource.AsQueryable.Where(GroupedPropertyName + " == " + "\"" + GroupValue + "\""); 

AsQueryable()在Linq命名空間中可用。

  1. 通過上面的查詢過濾器返回的items,才使個體item.Checked = true(假設項目類實現INotifyPropertyChanged,並提出了PropertyChanged通知Checked屬性)。

讓我知道這是否工作。

0

如果你使用MVVM模式只需將您的視圖模型綁定複選框屬性設置爲「真」與CheckBox控件將反映價值

相關問題