public MyBehavior(CheckBox source) { this.checkBox = source; this.checkBox.Unloaded += checkBox_Unloaded; checkBox.Dispatcher.BeginInvoke(new Action (() => { grid = checkBox.ParentOfType<RadGridView>(); groupRow = checkBox.ParentOfType<GridViewGroupRow>(); if (grid != null && groupRow != null) { groupRow.Unloaded += groupRow_Unloaded; this.UpdateIsChecked(groupRow.Group); } if (grid != null) { grid.SelectionMode = System.Windows.Controls.SelectionMode.Extended; grid.SelectionUnit = GridViewSelectionUnit.FullRow; checkBox.Click += clickHandler = (s, e) => { grid.SelectionChanged -= grid_SelectionChanged; if (checkBox.IsChecked == true) { grid.Select(this.GetSubGroupItems(((GroupViewModel)checkBox.DataContext).Group)); } else { grid.Unselect(this.GetSubGroupItems(((GroupViewModel)checkBox.DataContext).Group)); } grid.SelectionChanged += grid_SelectionChanged; }; groupRow.DataContextChanged += dataContextChangedHandler = (s, e) => { this.UpdateIsChecked(e.NewValue as IGroup); }; } } )); }