1

デザインモード(Visual Studio WPFDesignerまたはExpressionBlendでWPFウィンドウが表示されている場合)でのみ作成されるサンプルデータを作成したいと思います。私はこれを試しました:

public MainWindow()
{
    InitializeComponent();

    if (DesignerProperties.GetIsInDesignMode(this))
    {
        DataContext = new Person() { Name = "Harry" };
    }
}

デザイナはWindowクラスのコンストラクタを呼び出さないようです。サンプルデータはインスタンス化がより複雑なので、C#コードで作成する必要があります。何か案は?

4

2 に答える 2

3

XAMLでDataContextの設定を直接またはバインディングを使用して行うと、コンストラクターがスキップされる問題を回避できます。新しいバージョンのツールは、DataContextを設定するために設計時にのみ呼び出されるad:DataContextの設定もサポートしています。インスタンス化をXAML(つまりコンストラクターパラメーター)で直接実行できない場合は、MainWindow.xaml.csでgetプロパティを宣言するだけで、デザインデータインスタンスをインスタンス化して返すことができます。オブジェクトの作成全体をゲッターに保持すると、オブジェクトが呼び出されることがないため、実行時にオブジェクトが作成されなくなります。

public MyData { get { return new Person() { Name = "Harry" }; } }

次に、XAMLで、ウィンドウのd:DataContextを新しいプロパティにバインドできます。

d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=MyData}"

これを行うには他にも多くのオプションがありますが、これはUIに最も近いため、通常、既存のコードに追加するのが最も簡単です。Josh Smithは最近、さまざまなオプションの概要を説明しました。設計時のデータはまだデータです

于 2010-05-04T20:41:08.110 に答える
1

現在、VisualStudio2010とExpressionBlend4のデザイン時サポートを使用しています。この新機能は、私の要件のほとんどを満たしています。

これがどのように機能するかは、 WPFアプリケーションフレームワーク(WAF)のBookLibraryサンプルアプリケーションに示されています。WAFの.Net4バージョンをダウンロードしてください。

于 2010-07-10T09:09:17.630 に答える