Ich muss eine Bindung im Code festlegen.
Ich kann es nicht richtig machen.
Das habe ich versucht:
XAML:
<TextBox Name="txtText"></TextBox>
Code dahinter:
Binding myBinding = new Binding("SomeString");
myBinding.Source = ViewModel.SomeString;
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding);
ViewModel:
public string SomeString
{
get
{
return someString;
}
set
{
someString= value;
OnPropertyChanged("SomeString");
}
}
Die Eigenschaft wird nicht aktualisiert, wenn ich sie einstelle.
Was mache ich falsch?
c#
wpf
xaml
data-binding
Willem
quelle
quelle
Sie müssen die Quelle in das Ansichtsmodellobjekt ändern:
quelle
Neben der Antwort von Dyppl halte ich es für schön, dies in die
OnDataContextChanged
Veranstaltung aufzunehmen:Wir hatten auch Fälle, in denen wir das nur
DataContext
in einer lokalen Eigenschaft gespeichert und damit auf die Eigenschaften des Ansichtsmodells zugegriffen haben. Die Wahl liegt natürlich bei Ihnen. Ich mag diesen Ansatz, weil er besser mit dem Rest übereinstimmt. Sie können auch eine Validierung hinzufügen, z. B. Nullprüfungen. Wenn Sie sich tatsächlich ändernDataContext
, wäre es schön, auch anzurufen:um die Bindung des alten Ansichtsmodells zu löschen (
e.oldValue
im Ereignishandler).quelle