2014-02-05 36 views
1

我有一個列表框,我在其中添加了兩個控件,即一個複選框和一個datagrid並排作爲listboxitem。我在下面的方式做到了:如何獲取在datagrid中選中的所有列標題複選框,當我點擊不屬於wpf中datagrid一部分的複選框時?

在後面的代碼:
listBox1.items.Add(DT)

這裏DT是表名。

在XAML:

<ListBox Grid.Row="0" AlternationCount="2" MinHeight="305" HorizontalAlignment="Stretch" Name="listBox1" VerticalAlignment="Stretch" MinWidth="537" >    
     <ListBox.ItemTemplate>     
      <DataTemplate>      
        <StackPanel Name="stkPanel" MinHeight="80" MinWidth="500" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="40"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <DataGrid Grid.Column="1" 
            AutoGenerateColumns="True" 
            MinHeight="75" 
            HorizontalAlignment="Center" 
            Name="dataGrid1" 
            VerticalAlignment="Stretch" 
            MinWidth="470" 
            MaxWidth="900" 
            ItemsSource="{Binding}" 
            IsReadOnly="True" Background="#E6BAB7B7"> 
          <DataGrid.ColumnHeaderStyle> 
           <Style TargetType="DataGridColumnHeader"> 
            <Setter Property="ContentTemplate"> 
             <Setter.Value> 
              <DataTemplate> 
               <CheckBox Name="colCheckBox" Content="{Binding}"/> 
              </DataTemplate> 
             </Setter.Value> 
            </Setter> 
           </Style> 
          </DataGrid.ColumnHeaderStyle> 
         </DataGrid> 
         <CheckBox Grid.Column="0" Height="35" Width="25" Name="IsDone" HorizontalAlignment="Right" VerticalAlignment="Center" Checked="IsDone_Checked" /> 
         </Grid>       
       </StackPanel>     
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

現在,當我檢查「IsDone」複選框即一個ListBoxItem的一部分,所有的存在於一個數據網格的列標題的複選框(也是列表框項)應該檢查該特定列表框項目行。如果任何數據網格列標題中的任何複選框未選中,則「Isdone」複選框也應同時取消選中。請給我建議如何操作?

在此先感謝

回答

0

通過Element Binding,這樣便解決了問題..

<DataTemplate>      
       <StackPanel Name="stkPanel" MinHeight="80" MinWidth="500" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="40"/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <DataGrid Grid.Column="1" 
           AutoGenerateColumns="True" 
           MinHeight="75" 
           HorizontalAlignment="Center" 
           Name="dataGrid1" 
           VerticalAlignment="Stretch" 
           MinWidth="470" 
           MaxWidth="900" 
           ItemsSource="{Binding}" 
           IsReadOnly="True" Background="#E6BAB7B7"> 
         <DataGrid.ColumnHeaderStyle> 
          <Style TargetType="DataGridColumnHeader"> 
           <Setter Property="ContentTemplate"> 
            <Setter.Value> 
             <DataTemplate> 
              <CheckBox Name="colCheckBox" IsChecked="{Binding IsChecked, ElementName=IsDone, Mode=OneWay}" Content="{Binding}"/> 
             </DataTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </DataGrid.ColumnHeaderStyle> 
        </DataGrid> 
        <CheckBox Grid.Column="0" Height="35" Width="25" x:Name="IsDone" HorizontalAlignment="Right" VerticalAlignment="Center" Checked="IsDone_Checked" /> 
        </Grid>       
      </StackPanel>     
     </DataTemplate> 
+0

嗨Sankarann, 謝謝您的回答。但是有一個小問題。當我點擊「IsDone」複選框時,列標題中的所有複選框都會被選中。這可以正常工作。但是,如果任何存在於datagrid列標題中的複選框未選中,則所有複選框都將被取消選中。我需要的只是取消選中那個特殊的列標題複選框,我想不選中「IsDone」複選框。 – user3269629

+0

設置'BindingMode = OneWay' ..這不會更新源和其他人..檢查更新的答案.. – Sankarann

相關問題