So I figured it out. When I set the Datacontext for the control, the all the CollectionChanged delegates where called THEN the Columns changed property was called. The Columns value was then set but nothing else was changed. Notice I added the Transfer to the OnColumnsPropertyChanged and it all started to work.
publicclassColumnBindingBehavior : Behavior<RadGridView> { privateRadGridView Grid { get { returnAssociatedObject; } } publicINotifyCollectionChanged Columns { get{ return(INotifyCollectionChanged)GetValue(ColumnsItemsProperty); } set{ SetValue(ColumnsItemsProperty, value); } } publicstaticreadonlyDependencyProperty ColumnsItemsProperty = DependencyProperty.Register("Columns", typeof(INotifyCollectionChanged), typeof(ColumnBindingBehavior), newPropertyMetadata(OnColumnsPropertyChanged)); privatestaticvoidOnColumnsPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs args) { var behavior = (ColumnBindingBehavior)target; var collection = args.NewValue asINotifyCollectionChanged; if(collection != null) {// collection.CollectionChanged -= behavior.ContextColumns_CollectionChanged;// behavior.Grid.Columns.CollectionChanged -= GridColumns_CollectionChanged; Transfer(behavior.Columns asIList, behavior.Grid.Columns);// collection.CollectionChanged += behavior.ContextColumns_CollectionChanged; } } protectedoverridevoidOnAttached() { base.OnAttached(); Transfer(Columns asIList, Grid.Columns); //Grid.Columns.CollectionChanged -= GridColumns_CollectionChanged; //Grid.Columns.CollectionChanged += GridColumns_CollectionChanged; } voidContextColumns_CollectionChanged(objectsender, NotifyCollectionChangedEventArgs e) { UnsubscribeFromEvents(); Transfer(Columns asIList, Grid.Columns); SubscribeToEvents(); } voidGridColumns_CollectionChanged(objectsender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { UnsubscribeFromEvents(); Transfer(Grid.Columns, Columns asIList); SubscribeToEvents(); } privatevoidSubscribeToEvents() { //Grid.Columns.CollectionChanged += GridColumns_CollectionChanged; //if (Columns != null) //{ // Columns.CollectionChanged += ContextColumns_CollectionChanged; //} } privatevoidUnsubscribeFromEvents() { //Grid.Columns.CollectionChanged -= GridColumns_CollectionChanged; //if (Columns != null) //{ // Columns.CollectionChanged -= ContextColumns_CollectionChanged; //} } publicstaticvoidTransfer(IList source, IList target) { if(source == null|| target == null) return; target.Clear(); foreach(var o insource) { target.Add(o); } } }Hope someone else can use this.









