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.
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
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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?
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