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 ?


Anmelden zum Antworten