0

宣言型のDataContextを使用してWPFUserControlを設定することがよくあります。

<UserControl...>
    <UserControl.DataContext>
        <local:SomeModel x:Name="Model" />
    </UserControl.DataContext>
</UserControl>

デザインモードの場合、VisualStudioはDataContextのインスタンス化を試みます。ただし、DataContextが構成ファイルからデータをプルしている場合、VisualStudio2010は次のようなエラーをスローします。

「SomeModel」のインスタンスを作成できません。

エラーがスローされた場合、設計時の経験はほとんどまたはまったく価値がありません。DataContextをコメントアウトすると、Visual Studio 2010のデザインモードは期待どおりに機能します(DataContextはありません)。

Visual Studioに設計時にXAMLで宣言されたDataContextを無視させる方法はありますか?

4

2 に答える 2

4

データコンテキストをオーバーライド(または「new」で非表示)し、System.ComponentModel.DesignerProperties.GetIsInDesignMode()を使用して適切なコンテキストを返します。

ボーナスポイントについては、条件付き分割をプリプロセッサディレクティブでラップするか、賢明なConditionalAttribute()を使用して、この余分なノイズが実稼働環境に出ないようにします。

于 2010-07-22T00:03:34.520 に答える
1

完全に理解できるかどうかはわかりませんが、この拡張メソッドを使用して、デザイナーがコードを実行していることを検出します。

public static class Extensions
{
    public static bool IsDesigner( this Process process )
    {
        if ( process.MainModule != null )
            return ( process.MainModule.ModuleName.Contains( "devenv.exe" ) );

        return false;
    }
}
于 2010-07-21T23:17:46.910 に答える