0

非常に複雑なUIには、次の要件があります。(ここでの複雑さは、[約100]の形式のコントロールがたくさんあることを意味します)。私はMVVMを使用しています(問題がMVVMから少し離れる必要がある場合は、問題ありません)

私の質問は、編集可能なコンボボックステキストボックスです。しかし、私はすべてのコントロールに適合する共通のアルゴリズムを聞きたいと思います。

要件1:ユーザーがコンテンツを編集して次のコントロールに移動すると、コントロール/テキストの色が赤になります。

要件2:ユーザーが以前に編集したコントロールに戻り、最初に存在していた値を入力すると、コントロール/テキストの色が黒に戻る必要があります。

要件が厳しいことはわかっています。以前の値を保存し、関数を呼び出してコントロールの色を変更できる汎用アルゴリズムを設計することに頭を悩ませています。

すべてのアイデアを提供するために、
->Default_TextやTextなどのTextBoxごとに2つのプロパティを保存してみました。ただし、プロパティの数が非常に多いため、メモリフットプリントは非常に大きくなります。また、非常に多くのプロパティを維持することは非常に困難です。
->変更された値を保存するために、すべてのViewModelに辞書を追加してみました。しかし、ここで私が直面した問題は、アプリケーション内のすべてのコントロールに一意のキーを与えることでした。これはあまり役に立ちません
-> TextBox、ComboBoxなどのコントロールをサブクラス化し、要件に合うようにいくつかのメソッドをオーバーライドすることさえ考えてみましたが、残念ながら検証などを追加し始めたとき、私は惨めに失敗しました。

そのため、ここでは、すべての元に戻るREDO機能、コントロールのスタイルの変更などを処理するための汎用WPFプロパティシステム/アルゴリズムの設計に固執しています!!!

あなたの専門家が私を正しい方向に導き、そのようなアルゴリズム/システムの開発を手伝ってくれるなら、それは本当に素晴らしいことです。サンプルイラストもいいですね!!!

4

2 に答える 2

1

もう 1 つの方法は、モデル (またはビューモデル) で「汚い」追跡を使用し、プロパティ isdirty にバインドする (そしてそれを色に変換する) ことです。

于 2012-01-29T07:50:53.533 に答える
1

上記の問題に対する答えを見つけました。これには添付の動作を使用しました。このリンクの詳細については、StackOverFlowからの XAML からの関数呼び出しを参照してください。

データバインドするときは、Binding=OneWay を使用して DataBound 変数の初期値を Tag プロパティに格納します。次に、LostFocus イベントの添付ビヘイビアーを作成しました。

ユーザーがコントロールに入ってから他のコントロールに移動するたびに、LostFocus イベントが発生し、添付された動作が呼び出されます。ここでは、値が Tag の値と等しいかどうかを確認します。同じ場合は黒で表示し、そうでない場合は赤で表示します。

アタッチされた動作が WPF でロックします。コードが乱雑になることなく、それから何でもきれいに達成できます!!!!

于 2010-10-11T18:23:35.557 に答える