2

mvvmパターンを使用する必要があります。ビューモデルは、私が読んでいるものからのビューを気にするべきではないことを私は知っています。結果として、私はこの問題を解決する方法がわかりません:

基本的にテキストボックスとリストビューをオートコンプリートコントロールに変換するdllがあります。

SomeDll.InitAutocomplete<string>(TextBox1, ListView1, SomeObservableCollection);

とにかく、mvvmパターンを使用してビューモデルからそのメソッドを呼び出す方法がわかりません。ビューでコントロールを参照すると、ルールが崩れます。

私はMVVMパターンに不慣れであり、私の会社はそれに従うことを要求しています。この問題を解決するための最も適切な方法は何でしょうか?

ビュー全体をコンストラクターパラメーターとしてビューモデルに渡すことで解決できることはわかっていますが、ビュー内の2つのコントロールを参照する必要があるという理由だけで、mvvmパターンが完全に壊れてしまいます。

4

2 に答える 2

3

ここで行っているのは純粋なビューの問題なので、ビュー (コード ビハインド) で行うことをお勧めします。ビューは VM とその監視可能なコレクションについて知っているので、コード ビハインドにこの呼び出しを行わせてみませんか?

(「SomeDll」用の非コード/XAML API を取得できるかどうかも確認することをお勧めしますが、それをどの程度制御できるかはわかりません)

于 2012-06-04T16:14:26.120 に答える
2

ここで指摘したいことが2つあります -

まず、これは実質的にすべてビュー層コードです。そのため、コード ビハインドを使用することは必ずしも MVVM に違反しているわけではありません。

そうは言っても、これは多くの場合、次の 2 つの方法のいずれかでよりエレガントに処理されます。

  1. この機能を新しいコントロール (事実上コントロール) にラップできますAutoCompleteTextBox。これにより、"textbox" および "listview" ビジュアル要素をコントロール テンプレートに含め、Xaml 内の補完項目にバインドできます。

  2. これを添付プロパティ (または Blend 動作) に変換して、テキスト ボックスに "添付" し、その機能を (すべて xaml 内で) 追加することができます。アイテム コレクションは、添付プロパティ (または動作) のバインディングになります。

于 2012-06-04T16:15:42.890 に答える