I’m having trouble creating a DependencyProperty of type “Binding”. Other types work ok, and they resolve successfully if I populate them using a binding.
In my scenario I want to grab the raw binding, so that I can use it to bind to properties of child objects, in much the same way that DataGrid does columns – ie for each binding specified in a column, it binds to each of the items in the ItemsSource collection, rather than binding the the DataContext itself.
<mg:MultiSelectDataGrid x:Name="Grid" DockPanel.Dock="Left"
ItemsSource="{Binding Path=Rows}" DataContext="{Binding}"
AutoGenerateColumns="False" UriBinding="{Binding Path=UrlItems}">
And in my “MultiSelectDataGrid”:
public static readonly DependencyProperty UriBindingProperty =
DependencyProperty.Register("UriBinding", typeof(BindingBase),
typeof(MultiSelectDataGrid),
new PropertyMetadata { PropertyChangedCallback = OnBindingChanged});
private static void OnBindingChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
// This is never enterred
}
public BindingBase UriBinding
{
get { return (BindingBase)GetValue(UriBindingProperty); }
set { SetValue(UriBindingProperty, value); }
}
The callback never gets called, and the property never gets set. I’ve tried all kinds of permutations, with callbacks, without. The only thing that gave me any success was if I replaced the binding with a string (eg UriBinding=”hello”) – in that case it would fire the callback, and set the property, but would, of course, fail because it’s the wrong type.
What am I doing wrong? I’ve seen a whole load of examples of this, and I guess this is what DataGrid must be doing itself.
Thanks
Curiously only other place I am aware of that has
Bindingtype property isDataGridBoundColumnclass which derives intoDataGridTextColumn,DataGridCheckBoxColumnetc…And interestingly there the property is NOT a dependency property. It is a plain CLR type property. I guess the infrastructre of binding is based upon the limitation that you cannot bind to binding type DP.
Other properties of the same class are very well DPs like Visibility, Header etc.
In
DataGridBoundColumntheBindingproperty is declared as below with a very crude explanation for the same …