Problemas con DataGrid (WPF)

Tengo que hacer una aplicación con C# y WPF, y estoy atascado con algo simple pero del cual no he encontrado nada de información.

Tengo un DataGrid con datos agrupados. Una de las Columnas debe checkbox tanto en la cabecera como en cada fila y en la cabecera de cada grupo.

Tengo que hacer de algun modo que al activar el checkbox de un grupo se activen los checkbox de las filas del grupo, y que al activar el checkbox de la cabecera se activen todos los checkbox de la tabla.

Imagen

Edit:

Ya lo solucione! un poco laborioso pero lo logré:

public class FindControl
    {
        public static T FindChild<T>(DependencyObject parent, string childName)
                    where T : DependencyObject
        {
            // Confirm parent and childName are valid.
            if (parent == null) return null;

            T foundChild = null;

            int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
            for (int i = 0; i < childrenCount; i++)
            {
                var child = VisualTreeHelper.GetChild(parent, i);
                // If the child is not of the request child type child
                T childType = child as T;
                if (childType == null)
                {
                    // recursively drill down the tree
                    foundChild = FindChild<T>(child, childName);

                    // If the child is found, break so we do not overwrite the found child.
                    if (foundChild != null) break;
                }
                else if (!string.IsNullOrEmpty(childName))
                {
                    var frameworkElement = child as FrameworkElement;
                    // If the child's name is set for search
                    if (frameworkElement != null && frameworkElement.Name == childName)
                    {
                        // if the child's name is of the request name
                        foundChild = (T)child;
                        break;
                    }
                }
                else
                {
                    // child element found.
                    foundChild = (T)child;
                    break;
                }
            }

            return foundChild;
        }

        public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is T)
                    return (T)child;

                T childOfChild = FindVisualChild<T>(child);
                if (childOfChild != null)
                    return childOfChild;
            }
            return null;
        }

        public static void CheckAllBoxes(DependencyObject obj, bool? isChecked)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                // If a checkbox, change IsChecked and continue.
                if (obj is CheckBox)
                {
                    CheckBox chk = ((CheckBox)obj);
                    chk.IsChecked = isChecked;
                    continue;
                }

                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                CheckAllBoxes(child, isChecked);
            }
        }
    }

public partial class DetallesAgenda : RibbonWindow
    {
       ....
        private void CheckBoxGrupo_Click(object sender, RoutedEventArgs e)
        {
            CheckBox handler = (CheckBox)e.Source;

            FrameworkElement container = ((FrameworkElement)((FrameworkElement)handler.Parent).Parent);
            FindControl.CheckAllBoxes(container, handler.IsChecked == true);
        }

        private void CheckBoxCabecera_Click(object sender, RoutedEventArgs e)
        {
            CheckBox handler = (CheckBox)e.Source;
            FindControl.CheckAllBoxes(Tabla, handler.IsChecked == true);
        }
    }


Saludos.
0 respuestas