WPF Wert einer Textbox
-
Oh super. Danke so weit habe ich gar nicht geschaut.
Da habe ich nun nur noch eine Frage.
Wie triggere ich denn nun das der Wert dann beim Button klick in die Property im ViewModel geschrieben wird?
-
ChickenWing schrieb:
Wie triggere ich denn nun das der Wert dann beim Button klick in die Property im ViewModel geschrieben wird?
Musst du gar nicht, geschieht doch automatisch. Sobald der Focus in der
TextBox
verloren geht, wird der Wert derTextBox
in das Property im ViewModel geschrieben.Alles was du somit brauchst, ist ein
ICommand
Objekt des ViewModels an denButton
zu hängen.Grüssli
-
Nein wird nicht automatisch aufgerufen. Zumindest nicht wenn ich in der Textbox nicht eintippe. Wenn ich also in der Listview einen Wert auswähle wird der in der Textbox angezeigt.
Rufe ich nun meinen Button auf wird mein Fenster geschlossen. Die Convertback Methode wird aber nicht ausgeführt.
-
Wenn du nichts in der
TextBox
eingibst, verändert sich dieText
-Property auch nicht, wodurch es nie einConvertBack
auslöst. Du wirst womöglich nun sagen: "Wenn ich ein Element in derListView
auswähle, dann verändert sich dieText
-Property doch!"
Ja, aber aus dem Resultat einesBinding
desMultiBinding
. Dabei wird nurConvert
aufgerufen. Wenn dann auch nochConvertBack
aufgerufen würde, könnte dies in eine Endlosschleife enden. Daher wird dies nicht gemacht. Es wird eigentlich auch nicht erwartet, dass manMultiBinding
so verwendet.Wie ich schon sagte,
MultiBinding
ist dafür eigentlich nicht gedacht.Grüssli
-
Ok dann halt doch die andere Lösung. Dank dir.
-
Habe nun deine Lösung getestet. Allerdings funktioniert die ja gar nicht. Der Wert in der Textbox wird nur eimalig aus der ListView angezeigt. Beim Wechseln der selektierung ändert sich nichts mehr.
Zum anderen macht die set Methode gar nichts. Ausser ein Property Changed zu werfen.
-
ChickenWing schrieb:
Habe nun deine Lösung getestet. Allerdings funktioniert die ja gar nicht. Der Wert in der Textbox wird nur eimalig aus der ListView angezeigt. Beim Wechseln der selektierung ändert sich nichts mehr.
Bei mir hat alles funktioniert. Hast du das
CurrentChanged
Event korrekt abonniert? Rufst du darin dasPropertyChanged
Event korrekt auf?IsSynchronizedWithCurrentItem="True"
gesetzt?ChickenWing schrieb:
Zum anderen macht die set Methode gar nichts. Ausser ein Property Changed zu werfen.
Ja, also ein wenig selber programmieren darfst du natürlich auch noch. Deshalb habe ich dort ja auch den Kommentar hinterlassen, welcher dir auch ein weitergehendes Vorgehen erklärt.
Grüssli
-
Hallo Dravere.
Oh sorry hatte da noch nen kleinen Fehler drin. Das mit der Auswahl funktioniert nun.
Ja, also ein wenig selber programmieren darfst du natürlich auch noch.
Klar. Hatte deinen Kommentar überlesen. Sorry nochmals.
Aber nun habe ich noch das Problem, dass die SetMethode nur einmal bei start aufgerufen wird. Das ist doch das selbe Problem wie beim ConvertBack?
Oder geht das bei dir?
-
Ok habe deine Lösung nun so abgeändert dass Sie funktioniert.
OnCurrentRecipeChanged sollte nicht das RaisePropertyChanged Event werfen.
sondern direkt das Property setzenprivate void OnCurrentRecipeChanged(object source, EventArgs e) { CurrentRecipeName = GetSelectedRecipe().Name; } private string _currentRecipeName; public string CurrentRecipeName { get { return __currentRecipeName; } set { __currentRecipeName = value; RaisePropertyChanged("CurrentRecipeName"); } }
So funktionierts.
-
Damit meinte ich, dass du auch noch etwas selber programmieren sollst. Logisch musst du das so machen. Ich hoffe, dass dir auch klar ist wieso.
Grüssli
-
Logisch musst du das so machen. Ich hoffe, dass dir auch klar ist wieso.
Ja, klar ist mir das nun auch. Nun verstehe ich aber nicht wieso du mir das mit dem RaisePropertyChanged in der Methode OnCurrentRecipeChanged gezeigt hast.
-
Noch eine andere Frage dazu.
Wenn ich die View öffne ist automatisch der erste Wert in der ListView selektiert. Das möchte ich aber nicht. Ich will dass keiner selektiert ist. Was muß man da tun?
-
ChickenWing schrieb:
Ja, klar ist mir das nun auch. Nun verstehe ich aber nicht wieso du mir das mit dem RaisePropertyChanged in der Methode OnCurrentRecipeChanged gezeigt hast.
Weil sonst das gezeigte Beispiel nicht funktioniert hätte. Man hätte eine andere Selektion gemacht und die Textbox wäre nicht aktualisiert worden.
ChickenWing schrieb:
Wenn ich die View öffne ist automatisch der erste Wert in der ListView selektiert. Das möchte ich aber nicht. Ich will dass keiner selektiert ist. Was muß man da tun?
GetRecipeCollectionView().MoveCurrentTo(null)
am Ende des Konstruktors des ViewModels aufrufen.Grüssli
-
1. Hatt mich mehr aus der Bahn geworfen :-).
2. Das mit dem MoveCurrent(null) hatte ich. Aber noch nen Fehler woanders. Gut das geht jetzt. Danke.