2009-07-17 11 views
0

Wenn ich eine Eigenschaft im untergeordneten Ansichtsmodell an eine TextBox binden, wird die Quelle nicht aktualisiert, egal welchen Modus ich für die Bindung festgelegt habe.WPF (MVVM) Datenbindungsproblem

Der XAML-Code ist wie folgt:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay}"/> 

wWenn der Ansicht geladen, das Bindungssystem Abfrage der CashPaid Eigenschaft einmal. Aber immer wenn der Text bearbeitet wird, wird die Quelle nicht aktualisiert. Ich muss hier etwas verpassen oder das WPF-Datenbindungssystem unterstützt diese Art der Bindung nicht.

+0

Sie sind nicht klar, was gerade bearbeitet wird - der Text in der Textbox oder der Text in der CashPaid-Eigenschaft. – Will

+0

Der Text in der Textbox wird von Benutzer bearbeitet. –

Antwort

1

Standardmäßig aktualisiert TextBox nur die Quelle der Bindung, wenn der Fokus das Steuerelement verlässt. Wenn Sie UpdateSourceTrigger auf PropertyChanged gesetzt ist, wird die Eigenschaft als die Benutzertypen aktualisiert werden:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
+0

Ja, ich versuche UpdateSourceTrigger = PropertyChanged, kein Glück. –

2

Sie müssen auch sicherstellen, dass Orderdetail implementiert INotifyProperty geändert und stellen Sie sicher, dass Ihre CashPaid Eigenschaft benachrichtigt wird, wenn sie sich ändert. Weitere Informationen zu diesem Thema finden Sie im MSDN-Dokument.

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

+1

Siehe auch "Vorgehensweise: Implementieren der INotifyPropertyChanged-Schnittstelle": http://msdn.microsoft.com/en-us/library/ms229614.aspx –

+0

Ja, ich habe die INotifyProperty-Schnittstelle implementiert und löst das Ereignis beim Setter aus. für die reguläre Bindung z.B. binden Sie einfach an die aktuelle datacontext/viewmodel -Eigenschaft, es funktioniert gut. Der einzige Unterschied ist, wo sich die Immobilie befindet. Ich versuche sogar, den dataContext in der Textbox auf OrderDetail zu setzen und die Textbindung normal einzustellen, macht keinen Unterschied. –

+0

Versuchen Sie in diesem Fall, BindsDirectlyToSource = true zu setzen und festzustellen, ob sich irgendetwas ändert. Ist die CashPaid-Eigenschaft außerdem eine Zeichenfolge? Wenn nicht, kann TwoWay ohne einen IValueConverter nicht gebunden werden. –

0

Verwenden Snoop zu überprüfen, ob Sie einen Fehler Bindungen auf dem Text Text-Eigenschaft. die meiste Zeit können Sie eine ziemlich gute Vorstellung davon bekommen, was wirklich passiert, wenn Sie es verwenden