2

を使用して ViewModel を View にアタッチするのはかなり便利ですが d:DataContext="{d:DesignInstance ViewModel}"、この場合、View デザイナーは ViewModel のインスタンスの作成を開始し、例外でクラッシュします。

たとえば、ViewModel には、データベースからロードされた統計情報に依存するコマンドがあります。ビジュアル デザイナーは統計を読み込むことができず、統計が残っているnullため、コマンドが例外をスローし、デザイナーがクラッシュします。

これを克服するオプションはありますか、それとも ViewModel へのバインディングを削除する必要がありますか?

4

3 に答える 3

1

通常、テストデータを返す設計用の個別のビューモデル(スタブ)があります。実際のViewMOdelから継承してダミーのデフォルトを設定することも、同じ名前のプロパティを持つ完全に別個のViewModelを設定することもできます。

私は通常、WPFですべてをデフォルト値に初期化することをお勧めします

于 2012-06-21T12:53:00.380 に答える
1

ビューモデルのコンストラクターは、設計時にデータコンテキストを構築するのに疲れていて、失敗します。

1つの原因が考えられます。構成からのデータ接続を使用している可能性があります。

最も簡単な方法は、ビューモデルのコンストラクターコードをtry catchブロックに配置することであり、失敗した場所を確認することをお勧めします。

お気に入り

public class myViewmodel()
{
 public myViewmodel()
{

try
{
// build your data context.
}
catch(Exception ex)
{
//show the messages
}

}

}

于 2012-06-21T14:00:23.893 に答える
1

IsDesignTimeCreatableDesignInstance マークアップで設定しない限り、コンストラクターを介してデータ コンテキスト クラスを実際にインスタンス化することはありません。同じ「データ形状」を持つインスタンスを作成するだけです。この偽のデータ シェイプの既定のコンテンツには null が含まれる可能性があるため、データ コンテキストを使用するクラスを修正する必要があるため、データが初期化されていない場合にデザイナーがクラッシュすることはありません。

于 2012-06-21T13:53:02.653 に答える