2009-07-17 29 views
0

子ビューモデルのプロパティをTextBoxにバインドすると、バインディングで設定したモードに関係なく、ソースは更新されません。ロードビューWwhenWPF(MVVM)データバインディングの問題

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

、結合システムクエリCashPaidプロパティ一度:

XAMLコードは、このようなものです。テキストが編集されるたびに、値はソースを更新しません。私はここで何かが欠落しているか、WPFデータバインディングシステムはこの種のバインディングをサポートしていません。

+0

テキストボックスのテキストやCashPaidプロパティのテキストは、編集内容が明確ではありません。 – Will

+0

テキストボックスのテキストはユーザーによって編集されます。 –

答えて

1

デフォルトでは、TextBoxは、フォーカスがコントロールを離れるときにのみバインディングのソースを更新します。あなたはPropertyChangedUpdateSourceTriggerを設定した場合、プロパティは、ユーザーの種類として更新されます。

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

はい、私はUpdateSourceTrigger = PropertyChanged、運を設定しようとしました。 –

2

あなたはまた、OrderDetailがINotifyPropertyが変更実装していることを確認し、それが変化したときに、あなたのCashPaidプロパティが通知されていることを確認する必要があります。これに関する詳細は、MSDNのドキュメントを参照してください。

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

+1

「INotifyPropertyChangedインターフェイスを実装する方法」も参照してください。http://msdn.microsoft.com/en-us/library/ms229614.aspx –

+0

はい、私はINotifyPropertyインターフェイスを実装し、セッターでイベントを発生させます。例えば定期的な結合のために。現在のdatacontext/viewmodelプロパティにバインドするだけで正常に動作します。唯一の違いは、プロパティが存在する場所です。私は、テキストボックスにdataContextをOrderDetailに設定し、テキストバインディングを通常どおりに設定しようとしても何の違いもありません。 –

+0

その場合、BindsDirectlyToSource = trueを設定して、何か変更があるかどうか確認してください。また、CashPaidプロパティは文字列ですか?そうでなければ、IValueConverterなしでTwoWayをバインドすることはできません。 –

0

あなたはテキストボックスのテキストプロパティのエラーバインドを持っているかどうかを確認するSnoopを使用してください。たいていの場合、実際に何が起こったのかを知ることができます。

関連する問題