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);
						};
					}
				}
				));
		}