Laden...

[erledigt] Binding an ein Property mehrerer Instanzen

Erstellt von Amosius vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.236 Views
A
Amosius Themenstarter:in
31 Beiträge seit 2010
vor 13 Jahren
[erledigt] Binding an ein Property mehrerer Instanzen

Ich habe eine WPF-Anwendung mit XAML und einer Textbox.

<TextBox Name="Name" Text="{Binding Source=Aufgabe, Path=aufgabenname, UpdateSourceTrigger=PropertyChanged}" />

So sieht die Klasse aus (reduziert):


class Aufgabe : INotifyPropertyChanged
    {
        string _aufgabenname;

        public Aufgabe()
        {
        }

        public string aufgabenname
        {
            get { return _aufgabenname; }
            set
            {
                _aufgabenname = value;
                OnPropertyChanged("aufgabenname");
            }
        }

        protected void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(property));
        } 

Ziel: Bei Auswahl einer Instanz (über eine grafische Oberfläche) soll die Eigenschaft in der Textbox dargestellt werden. Wählt der Anwender eine andere Instanz aus, so ändert sich der Inhalt der Textbox. Ist keine Textbox ausgewählt, so wird nichts in der Textbox angezeigt.

Das mit Source in der Textbox scheint noch nicht zu fruchten. Ich habe zwar über C# eine Bindung herstellen können, mit jeder Instanz wurde jedoch die Verbindung der vorhergehenden Instanz wieder aufgelöst.

Nach meinem Verständnis müsste dies über die Bindings recht komfortabel lösbar sein, ohne einzelne Implementierungen für Objekt ausgewählt, Objekt abgewählt etc.
Bislang habe ich sehr viel über Lösungen zu statischen Resourcen gefunden, aber bei diesem Fall fehlt mir der Best Practice Ansatz.

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo Amosius,

willkommen bei myCSharp.de

ich gehe mal davon aus dass du eine Liste hast wo du deine Aufgaben speicherst.
Diese sollte vom Typ ObservableCollection<Aufgabe> sein (weil diese die Änderungen in der Liste mit einem Event weitergibt).

Dann hast du vermutlich eine ListBox oder Ähnliches wo du die gewünschte Aufgabe auswählen kannst, oder?
Und die TextBox soll dann den AufgabeNamen der gewählten Instanz anzeigen, richtig?

Wenn das der Fall ist dann bist du schon dicht am Zeil.
Du musst beim Binding direkt an die Liste binden (angenommen die Heist AufgabenListe).

Hier ein Beispiel


<ListBox ItemsSource="{Binding AufgabenListe, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True" />

<TextBox Text="{Binding AufgabenListe.CurrentItem.aufgabenname, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

Zwar nur hier schnell runtergetippt aber das müsste bis auf die Tippfehler schon so funktionieren

PS: Die public Property (aufgabenName) sollte man immer Groß schreiben. Also "AufgabenName"

Gruss
Michael

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Amosius,

was genau meinst du mit einer Instanz? Wenn du mit "Instanz" ein Fenster meinst, kannst du den DataContext einfach weitergeben. Ansonsten vielleicht ein Converter oder eine Markup-Extension schreiben.

zero_x

A
Amosius Themenstarter:in
31 Beiträge seit 2010
vor 13 Jahren

Hallo michIG, hallo zero_x,

vielen Dank für die Ideen. Mit deinen Informationen michIG hast du mir sehr weitergeholfen.

Ich würde gerne den Beitrag schliessen, kann ich das als User?

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

Beiträge / Threads werden nur geschlossen wenn der Benutzer sich nicht an die Regeln hält.
In deinem Fall war alles Bestens. Vielen Dank
Normalerweise wird einfach im Titel vom Thread vorne ein [erledigt] davor geschrieben um den Thread als solchen zu kennzeichnen.
Jetzt habe ich das mal für dich gemacht, aber es wäre super wenn du das in Zukunft selbst machen könntest. 😃
Vielen Dank

Gruss
Michael