2011-06-18 2 views
0

WPFとMVVMを使用してLOBアプリケーションを構築しています。ユーザーがクライアントの詳細を挿入する必要がある場合、多数のウィンドウ(バインディングによって可視性プロパティが設定されたユーザーコントロールであるため、一度に1つしか表示されません)から行うことができます。MVVMを使用して親コンテナの可視性を変更するTextBox.Textを変更します。

問題は、すべてのTextBoxコントロールがテキストの値を可視性の変更(崩壊< - >表示される)の間に保ち、それらをリセットしたいということです。 トリガーをテキストボックススタイルで作成することはできません(ただしエラーはありません)。

MVVMパターンとの関連を維持するにはどうすればよいですか?

私はObjectDataProviderを使用してリフレクションを使用するメソッドを呼び出し、各TextBox.Text値を設定することを考えています。このオブジェクトデータプロバイダは、StackPanel(コンテナ)スタイルのトリガで設定されます。

答えて

0

私があなたを正しく理解しているなら、達成しようとしていることはウィザードです。ユーザーが[次へ]をクリックすると、現在のユーザーコントロールが非表示になり、次のユーザーコントロールが表示されます。

MVVMを行っているので、それぞれTextBox.Textがビューモデルのプロパティにバインドされると思います。これが当てはまる場合は、トリガーを使用する必要はありません。ユーザーコントロールの可視性をVisibleに設定する直前に、各プロパティを空の文字列に設定するだけです。

たとえば、ユーザーが表示され、次へ、次の画面をクリックした場合、あなたはテキストフィールドを移入するために使用されるScreen3ViewModel上のすべてのプロパティを設定する必要があり、Screen3である(例えばNameAddressOccupation)へ空の文字列。換言すれば、

<TextBox Text={Binding Name} /> 
<TextBox Text={Binding Address} /> 
<TextBox Text={Binding Occupation} /> 

コードを全力を尽くす、マークアップではない:

あなたのテキストボックスには、次のようになります。

ビューモデルでプロパティを変更するときにバインドエンジンがテキストフィールドを更新することができるように、ビューモデルにINotifyPropertyChangedが実装されていることを確認する必要があります。

+0

これはウィザードではありません。私はちょうど異なるユーザーコントロールを使用して値を挿入します。しかし、機能はあなたがそれを記述したのと同じです。ユーザーコントロールの可視性のロジックは別のビューモデル上にあるので、私はまだリフレクションを使用する必要があります。私は両方の方法を試し、より少ないコードで動作するものを見ていきます。ありがとう。 – amb

+0

私はフィールドを明示的にリセットするボタンを使い終わった。すべてが正しく設定されていても、ビューモデルのプロパティの設定値は機能しませんでした。 – amb

関連する問題