0

TextBoxユーザーが 2 文字の州コードを入力できる画面があります。その下にTextBoxは、ListBox50 の州コードすべてを含む があります。はTextBoxVM のプロパティにSelectedItemバインドされ、 は VM のプロパティにバインドされます。それはすべてうまくいきます。

私が UI を機能させたいのは、ユーザーが から状態を選択するListBoxと、TextBoxが自動的に入力され、これが正常に機能することです。

乱雑になるのは、ユーザーが の状態で入力するときTextBoxです。最初の文字を取得したら、その文字に最初に一致する州コードにリスト ボックスを再配置します。たとえば、ListBoxが「AK」(アラスカ) にあり、ユーザーが「」と入力するとします。 Idaho の ID" の場合、"I" を取得したらListBox、最初の "I" 状態である "IA" (Iowa) が表示されるように を配置します。

コード ビハインドを使用SelectionChanged=BringSelectionIntoViewして、次のようにコード化されたこのメソッドを指定すると、うまく機能します。

private void BringSelectionIntoView(object sender, SelectionChangedEventArgs e)
{
    ListBox lb = (ListBox)sender;
    lb.ScrollIntoView(lb.SelectedItem);
}

最初の文字が一致するまで状態コードのリストをスキャンし、バインドさIndexれているプロパティを更新すると、メソッドが呼び出され、希望する UI 動作が正確に得られます。 SelectedIndexBringSelectionIntoView()

ただし、最も純粋な MVVM 方法論でこれを実行しようとすると、非常にイライラすることがわかりました。私は MVVMLight または ExpressionBlend を使用していません。MVVM でこれを行う簡単な方法が必要です。ビューにUIコードを入れないという最も純粋な考え方は理解していますが、フレームワークはこの種の動作を実行するのが非常に面倒です。完全に機能する 2 行のコードをメソッドに組み込む方がはるかに実用的である場合に、パターンに固執するよう強制するためにこのような鈍い配管を作成する必要がある場合、利益が減少するポイントがあります。

だから私の質問はこれです:私は何か間違ったことをしていますか?MVVMに違反することなくこれを機能させる簡単な方法はありますか? ソリューションに追加の SDK や誰かのフレームワークが必要な場合は残念です。これは、一般的な OOP の意味で MVVM が特に優れた足場を持っていないことを示唆しています。

誰かが私がやろうとしていることのエラーを見ていますか、それともここで単純な解決策を見ていますか? ありがとう!

4

2 に答える 2