Hallo zusammen,
ich habe nun schon seit längerem versucht eine Lösung zu finden aber bisher waren all meine Versuche erfolglos.
Es geht darum das ich Daten einer Klasse von meinem View zu einem UserControl per Binding an einer DependencyProperty übergeben will.
Die Bindung hat auch funktioniert jedoch werden jedesmal beim abfeuern der Callback-Methode der DP leere Strings als NewValue übergeben.
Die angebundene Eigenschaft ist aber zu diesem Zeitpunkt definitv gefüllt. (Das weiß ich da die Bindung zum gleichen Zeitpunkt an einem DataGrid ohne DP funktioniert)
Vielleicht hat ja jemand eine Idee was das Problem hier sein könnte.
Anbei ein wenig Code zum verdeutlichen.
Diese Klasse enthält die Property "Name" das ist die Eigenschaft die ich im Binding übergeben will (wohingegen ein leerer String übergeben wird)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| public class Field : ObservableObject { public Field() { Name = string.Empty; }
private string name = string.Empty; public string Name { get { return name; } set { name = value; RaisePropertyChanged(); } } } |
Diese Klasse enthält eine Collection der anzubindenen Felder
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| public class MYObservableObjectFieldHolder : ObservableObject { public MYObservableObjectFieldHolder() { Fields = new ObservableCollection<Field>(); }
public ObservableCollection<Field> Fields { get; set; } } |
Hier ist der XAML-Code meines Views (dieser soll das UserControl: "UC_MyUserControl" ansteuern und die Namen der Felder an die
DependencyProperty FieldName übergeben (binding)
In dem WrapPanel sollen dann abhängig von der Anzahl an Feldern je ein UserControlObjekt mit dem jeweiligen Feldnamen angezeigt werden.
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| <ItemsControl DataContext="{Binding MyFieldHolderObject}" ItemsSource="{Binding Fields}" Margin="20,243,20,20"> <ItemsControl.ItemTemplate> <DataTemplate> <Controls:UC_MyUserControl FieldName="{Binding Name, Mode=TwoWay}"/> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel> </WrapPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> |
Hier ein Auszug aus dem betroffenen UserControl: "UC_MyUserControl".
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| public string FieldName { get { return (string)GetValue(FieldNameProperty); } set { SetValue(FieldNameProperty, value); } } public readonly static DependencyProperty FieldNameProperty = DependencyProperty.Register( "FieldName", typeof(string), typeof(UC_MyUserControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnFieldNamePropertyChanged) ); private static void OnFieldNamePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { (obj as UC_MyUserControl).OnFieldNamePropertyChanged(e); } private void OnFieldNamePropertyChanged(DependencyPropertyChangedEventArgs e) { FieldName = (string)e.NewValue; } |
Vielleicht hatte ja schonmal jemand die gleichen Probleme und kann mir dabei helfen.
Viele Grüße!