代码如下
 <DataGrid Style="{StaticResource NormalDataGridStyle}" HorizontalAlignment="Stretch" Name="myDataGrid" VerticalAlignment="Stretch" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTemplateColumn Width="90">
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <CheckBox Name="checkAll"   Content="全选/取消" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox  Name="theCheckBox" Tag="{Binding}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTextColumn Width="150" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="单据编号" Binding="{Binding Path=ReceiptNO}" />
                <DataGridTextColumn Width="100" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="创建人" Binding="{Binding Path=User.FullName}" />
                <DataGridTextColumn Width="100" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="创建时间" Binding="{Binding Path=CreateTime}" />
                <DataGridTextColumn Width="100" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="物品类型" Binding="{Binding Purchasing_GoodsClass.ClassName}" />
                <DataGridTextColumn Width="100" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="采购分组" Binding="{Binding OrderType,Converter={StaticResource vtos}}" />
                <DataGridTextColumn Width="100" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="订单状态" Binding="{Binding Status,Converter={StaticResource osts}}" />
                <DataGridTextColumn Width="100" CellStyle="{StaticResource NormalDataGridCell}" HeaderStyle="{StaticResource NormalDataGridColumnHeader}" Header="总金额"  Binding="{Binding Purchasing_OrderedItem,Converter={StaticResource totalprice}}" />
                <DataGridTemplateColumn Width="100" Header="操作">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Tag="{Binding}" Style="{DynamicResource EditIconButton}" Click="btnDetail_Click" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
查找checkbox的代码如下 private void HeadCheck(object sender, RoutedEventArgs e, bool IsChecked)
        {
            foreach (var item in myDataGrid.ItemsSource)
            {
                FrameworkElement datacell = myDataGrid.Columns[0].GetCellContent(item);
                if (null != datacell)
                {
                    CheckBox cb = datacell.FindName("theCheckBox") as CheckBox; //cb为
                    if (cb != null)
                    {
                        MessageBox.Show("found");
                    }
                }
            }

            
           
        }

解决方案 »

  1.   

    如果你只是为了获取第一列的勾选状态,可以换一种思路,将第一列的勾选属性绑定数据源,这样点击勾选框,数据源就会变化,你只要直接判断数据源的值即可,非常快捷方便。
    你直接获取CheckBox的方法为啥不行,我也不清楚,没时间调试,只要能达到目的就行了。
      

  2.   

    没法调试你发出来的代码,不能跟踪找问题。
    但我认为,checkbox并不是datacell的子项,checkbox是通过模板加进去的,所以用FindName找不到
      

  3.   

    绑定我是很喜欢,但是,挺简单的一个类,搞好几个Model 出来,就为了绑定到datagrid上面。那不是有小题大作,脱裤子放屁的嫌疑? WPF应该不是这样提高生产效率的吧?
    在MSDN的论坛上找了一段代码,好象可以达到要求public DataGridCell GetCell(int row, int column)
            {
                DataGridRow rowContainer = GetRow(row);            if (rowContainer != null)
                {
                    DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);                if (presenter == null)
                    {
                        myDataGrid.ScrollIntoView(rowContainer, myDataGrid.Columns[column]);
                        presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
                    }                DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);                return cell;
                }
                return null;
            }
            public DataGridRow GetRow(int index)
            {
                DataGridRow row = (DataGridRow)myDataGrid.ItemContainerGenerator.ContainerFromIndex(index);
                if (row == null)
                {
                    myDataGrid.UpdateLayout();
                    myDataGrid.ScrollIntoView(myDataGrid.Items[index]);
                    row = (DataGridRow)myDataGrid.ItemContainerGenerator.ContainerFromIndex(index);
                }
                return row;
            }        public static T GetVisualChild<T>(Visual parent) where T : Visual
            {
                T child = default(T);
                int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < numVisuals; i++)
                {
                    Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                    child = v as T;
                    if (child == null)
                    {
                        child = GetVisualChild<T>(v);
                    }
                    if (child != null)
                    {
                        break;
                    }
                }
                return child;
            }
      

  4.   

    public static T GetVisualChild<T>(Visual parent) where T : Visual
    这个方法应该是返回List的....一个控件下面可能有多个同类型的子控件