WPF Dependency Property Not Set

I am trying to associate a dependency property through XAML with my custom WPF control.

Here's how I register the dependency property:

public static readonly DependencyProperty AltNamesProperty = DependencyProperty.Register ("AltNames", typeof(string), typeof(DefectImages)); public string AltNames { get { return (string) GetValue(AltNamesProperty); } set { SetValue(AltNamesProperty, value); } } 

And here is what I call it in my XAML:

 <DataGrid.Columns> <DataGridTemplateColumn IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Name="StackPanel1" Grid.Column="0" Width="950"> <TextBlock FontSize="16" TextDecorations="None" Text="{BindingPath=StandardName}" Foreground="Black" FontWeight="Bold" Padding="5,10,0,0"></TextBlock> <TextBlock Text="{Binding Path=AltNames}"TextWrapping="WrapWithOverflow" Padding="5,0,0,10"></TextBlock> <!-- this part should be magic!! --> <controls:DefectImages AltNames="{Binding Path=AltNames}"></controls:DefectImages> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> 

I know that the AltNames property that I'm trying to bind is a valid property because I can display it in a text block just fine. Am I incorrectly registering a Dependency property?

What do I need to do to get the correct value assigned to AltNames in my code?

+8
c # wpf xaml
source share
2 answers

Thanks @Danko for starting me. I registered a callback to set the value when the property changed.
Here is what I finally ended up with:

 private static void OnDefectIdChanged(DependencyObject defectImageControl, DependencyPropertyChangedEventArgs eventArgs) { var control = (DefectImages) defectImageControl; control.DefectID = (Guid)eventArgs.NewValue; } /// <summary> /// Registers a dependency property, enables us to bind to it via XAML /// </summary> public static readonly DependencyProperty DefectIdProperty = DependencyProperty.Register( "DefectID", typeof (Guid), typeof (DefectImages), new FrameworkPropertyMetadata( // use an empty Guid as default value Guid.Empty, // tell the binding system that this property affects how the control gets rendered FrameworkPropertyMetadataOptions.AffectsRender, // run this callback when the property changes OnDefectIdChanged ) ); /// <summary> /// DefectId accessor for for each instance of this control /// Gets and sets the underlying dependency property value /// </summary> public Guid DefectID { get { return (Guid) GetValue(DefectIdProperty); } set { SetValue(DefectIdProperty, value); } } 
+11
source share

You may need to specify the PropertyMetadata argument in DependencyProperty.Register if the property affects how the control is processed. For example:

 DependencyProperty.Register("AltNames", typeof(string), typeof(DefectImages), new FrameworkPropertyMetadata( null, FrameworkPropertyMetadataOptions.AffectsRender ) ); 
+2
source share

All Articles