Hello,
I try to set a dependency property in a gridviews custom column, based on GridViewBoundColumnBase, with binding to another field of my datasource. The problem is, that then the Int32 dependency property always is set with the int default value of 0 and not the actual value in my data. If I also show this field as additional column, I can see, that it is filled correct in the datasource.
When I set the dependency property with a fixed value (e.G. 2), this value is properly transferred to the custom column implementation. When I try binding, nothing is set in the custom column implementation. I also tried a nullable type for my property, than always the null value is set, if I try binding.
After intense internet research, studding examples and other people problems and resolutions, my implementation should work, but unfortunately it don't.
Here my code:
01.public class ActualValueInputColumn : GridViewBoundColumnBase02.{03. public Int32 TestStepType04. {05. get { return (Int32) GetValue (TestStepTypeProperty); }06. set { SetValue (TestStepTypeProperty, value); }07. }08.09. public static readonly DependencyProperty TestStepTypeProperty =10. DependencyProperty.Register ("TestStepType", typeof (Int32), typeof (ActualValueInputColumn), new PropertyMetadata (null));11.12. public override FrameworkElement CreateCellEditElement (GridViewCell cell, object dataItem)13. {14. FrameworkElement picker = null;15. if (TestStepType == 0)16. {17. RadMaskedNumericInput numberPicker = new RadMaskedNumericInput ();18. numberPicker.SetBinding (RadMaskedNumericInput.ValueProperty, this.CreateValueBinding ());19. picker = numberPicker;20. }21....22. else if (TestStepType == 2)23. {24. RadMaskedTextInput textPicker = new RadMaskedTextInput ();25. textPicker.SetBinding (RadMaskedTextInput.ValueProperty, this.CreateValueBinding ());26. picker = textPicker;27. }28.29. return picker;30. }31.32. public override object GetNewValueFromEditor (object editor)33. {34. ...35. }36.37. private Binding CreateValueBinding ()38. {39. Binding valueBinding = new Binding ();40. valueBinding.Mode = BindingMode.TwoWay;41. valueBinding.NotifyOnValidationError = true;42. valueBinding.ValidatesOnExceptions = true;43. valueBinding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;44. valueBinding.Path = new PropertyPath (this.DataMemberBinding.Path.Path);45.46. return valueBinding;47. }48.}And by XAML (shortened):
01.<telerik:RadGridView x:Name="RadGridView1"02. telerik:StyleManager.Theme="Windows8Touch"03. ItemsSource="{Binding MeasuringMachineValues}"04. AutoGenerateColumns="False"05. ShowGroupPanel="False"06. IsFilteringAllowed="False"07. FontSize="18"08. CanUserDeleteRows="False"09. CanUserInsertRows="False">10. <telerik:RadGridView.Columns>11. <telerik:GridViewDataColumn Header="TestStepType"12. DataMemberBinding="{Binding TestStepType}"13. IsReadOnly="True"14. <qw:ActualValueInputColumn Header="Actual Value custom column"15. DataMemberBinding="{Binding ActualValueAsString, Mode=TwoWay}"16. TestStepType="{Binding TestStepType}"/>17. <telerik:GridViewDataColumn Header="Actual value standard"18. DataMemberBinding="{Binding ActualValueAsString}" />19. </telerik:RadGridView.Columns>20.</telerik:RadGridView>
Please can anybody tell me, what is wrong with my implementation or even give me a hint, how to debug this binding to get a clue, where the problem is?
Greetings
Thomas