2012-01-16 28 views
1

WPF &エンティティデータモデルでMVVMを使用すると、保存ボタンをクリックしたときに6つのテキストボックスのいずれかが変更されたときを検出しようとしています。私は正常に動作するすべての変更を保存するが、私はまた、それらのテキストボックスのいずれかが変更されている場合にのみ、ビュー内の他の場所でグリッドを更新しています。保存時にWPF/MVVMがテキストボックスの変更を検出する

私はwpfを初めて使用しており、どのようなアプローチをとるべきかわかりません。 xamlのテキストボックスのプロパティでUpdateSourceTriggerのようなものを使用するのですか、またはバリデーションを使用しますか?どのような最善の方法であれ、どうやって説明することができますか?任意のヘルプ

答えて

1

ため

おかげで最良の方法は、あなたがあなたのViewModel内の各テキストボックスに異なる変数を持っていた場合も及び双方向バインディングを使用します。また、INotifyPropertyChangedインタフェースを実装すると、ViewModelはプロパティ値が変更されたことをViewに通知できます。私はこれがあなたを正しい方向に向けることを願って、あなたの問題を解決するのを助けます。

他の方法では、値が変更されたことを示すためにフラグを使用して、保存がこのフラグを見て適切な処置を取ることです。プロパティSetterにフラグを設定することができます。

0

問題が完全にはっきりしていない:保存ボタンを押したときに何かが変更されたことを検出したいのですか?もしそうなら、なぜですか?ボタンを押す前にチェックしてみませんか?私は鈍角にしようとしていない、私は意図に追いつこうとしている。

ほとんどの場合、各テキストボックスでTwoWay DataBindingを使用して、VMのプロパティに戻すことをお勧めします。グリッドはこれらのプロパティにもバインドすることができ、何かが変更された場合にのみ更新が自動的に行われます。また、独自のOriginalValueプロパティを作成して、値が変更されたかどうかを簡単に比較することもできます。

また、保存ボタンをICommandにバインドします(私はRelayCommandを好む)。これにより、プロパティの変更状態を分析することによって、ViewModelからのバウンドボタンのEnabled状態を制御できます。

1

BigLは、すばらしいヒントを与えました。

私は追加することができます: あなたのWPFウィンドウのXAMLでは、あなたはテキストボックスのために、次のを持っているでしょう:

<TextBox Text="{Binding Path=MyPath, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}" /> 

、それは....

UpdateSourceTrigger =のPropertyChangedですBIGL mentioneなど、すべての奇跡を行い、タグ、(の終わりに

... d)。たぶんそれはあなたが探していたものです。なぜなら、フォーカスがあっても、フォーカスが失われていても、全くフォーカスが得られていなくても、テキストボックス内のテキストの変化を個別に検出するからです。 したがって、私はあなたのトリックを行うべきだと思います:-)

私にとってはうまくいきます....

関連する問題