-1

以前の質問Accessing variables from XAML and object from ViewModel using Code Behindに基づいて: どちらが最初に実行されるかをどのように知ることができますか?

コード ビハインドですか、それとも ViewModel ですか。
ViewModel の前にコード ビハインドが実行されるようにしたいだけです。

4

1 に答える 1

4

View と ViewModel はどちらも、インスタンス化される通常のクラスです。これは、他のクラスと同様にコンストラクターを呼び出すことによって行われます。したがって、質問に対する簡単な答えとして、各コンストラクターにブレークポイントを設定し、どのコンストラクターが最初にヒットするかを確認します。

アーキテクチャとユースケースに依存するため、質問に対する一般的な答えはありません。多くの場合、一部のコントロールは、その親の ViewModel のプロパティにバインドされ、ある時点で変更されます。その時点で、ビューは既に存在しており、プロパティが設定された値が既に存在している期間がわかりません。それ以外の場合、View は特定の ViewModel 用に作成され、それをコンストラクター パラメーターとして受け取ります。

ViewModel が View の前に存在することを確認する 1 つの方法は、ViewModel をコンストラクター パラメーターとして渡すことです。コンストラクターのパラメーターの背後にある考え方は、「このクラスには xy 型の既存のインスタンスを作成する必要がある」という表現です。これは、あなたが求めているものです。ただし、DataContextコンストラクターでビューとして設定し、ビューDataContextの作成後に変更できるため、ビューが作成後に割り当てられた新しいビューモデルを取得しないとは限りません。さらに悪いことに、コントロールには既定のコンストラクターがないため、XAML でコントロールを使用できなくなります。

最初の質問によると、ViewModel が View の前に存在しなければならない理由が明確ではありません。View からリソース値を読み取り、それを ViewModel のプロパティに割り当てる必要がある場合は、逆になると思いますか? または、ViewModel のビューにアクセスしていますか (しないでください!)?

問題は、そもそもなぜこの質問をしなければならないのかということです。あなた(またはあなたの上司...)の概念にはかなり間違ったものがあります.ViewとViewModelは、お互いを知らなくても実際に機能する2つのエンティティです. アイデアは、ViewModel で値を取得/設定するだけで単一の View が存在しなくても完全に機能するアプリケーションを構築し、ViewModel なしで完全に実行される View をコンパイルすることです。このアプローチをハックするには、MVVM をまったく使用しない方がよいでしょう。

于 2013-04-18T07:01:29.363 に答える