WPF Binding an eine Klasse
-
Hallo ...
Leider komme ich beim Thema Binding wiedermal überhaupt nicht zurecht, und muss nen bisschen weiter ausholen:
In meiner codebehind definiere ich eine Liste in welcher ich Instanzen DIESER Klasse speichere:
public class newQuestionStruct : DependencyObject { protected static readonly DependencyProperty frageProperty = DependencyProperty.Register("frage", typeof(String), typeof(newQuestionStruct)); protected static readonly DependencyProperty fachbereichProperty = DependencyProperty.Register("fachbereich", typeof(String), typeof(newQuestionStruct)); public String frage { get { return (String)GetValue(frageProperty); } set { SetValue(frageProperty, value); } } public String fachbereich { get { return (String)GetValue(fachbereichProperty); } set { SetValue(fachbereichProperty, value); } } ...
Per Zufall soll eine dieser Instanzen ausgewählt werden, was soweit natürlich klappt. Die so ausgewählte Instanz versuche ich nun so zu hinterlegen:
public class aktuelleFrageClass : DependencyObject, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected static DependencyProperty aktuelleFrageProperty = DependencyProperty.Register("aktuelleFrage", typeof(newQuestionStruct), typeof(newQuestionStruct)); #region *** Propertys *** public newQuestionStruct aktuelleFrage { get { return ((newQuestionStruct)GetValue(aktuelleFrageProperty)); } set { SetValue(aktuelleFrageProperty, value); OnPropChanged(aktuelleFrageProperty.Name); } } #endregion *** Propertys *** void OnPropChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
In der XAML des UserControls instanziere ich das ganze momentan so ...
<local:aktuelleFrageClass x:Key="aktuelleFrageClassDataSource" x:Name="aktuelleFrageClassDataSource" d:IsDataSource="True" />
IaktuelleFrageClassDataSource = (aktuelleFrageClass)this.FindResource ("aktuelleFrageClassDataSource");
Soweit so gut ...
Nun versuche ich die zufällig ausgewählte Instanz so zuzuweisen:
IaktuelleFrageClassDataSource.aktuelleFrage = loadedKatalog[aktuellerIndex];
...was augenscheinlich auch klappt.
Nun gibt es eine FrageTextBox wessen TextProperty an die "aktuelle Frage" gebunden werden soll.
Und genau dies gelingt mir nicht.
Text="{Binding Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Path=aktuelleFrage.frage, ElementName=aktuelleFrageClassDataSource}"
Könnt ihr mir helfen ???
-
Hallo shaun,
ist 'IaktuelleFrageClassDataSource' denn ein Member deines UserControls oder aber nur eine lokale Variable (und dann kann das ja auch nicht klappen)?
Und dann mußt du im Xaml-Code natürlich den kompletten Pfad eintragen:Path=IaktuelleFrageClassDataSource.aktuelleFrage.frage
-
Hallo ...
Ja, IaktuelleFrageClassDataSource ist im UC als lokale Variable des Typs aktuelleFrageClass definiert.
Via ...
<local:aktuelleFrageClass x:Key="aktuelleFrageClassDataSource" x:Name="aktuelleFrageClassDataSource" d:IsDataSource="True" />
wird diese Klasse doch per XAML instanziert oder irre ich mich da ?
Gedacht war das so, das ich mir beim Start einer gewissen Methode des UserControls diese Instanz via ...
if (IaktuelleFrageClassDataSource == null) { IaktuelleFrageClassDataSource = (aktuelleFrageClass)this.FindResource ("aktuelleFrageClassDataSource"); }
...besorge und damit weiterarbeite. Liegt hier schon mein Denkfehler ?