WPF:如何在设计模式下创建样本数据?

时间:2010-05-04 20:18:02

标签: c# wpf designmode sample-data

我想创建仅在设计模式下创建的示例数据(当WPF窗口显示在Visual Studio WPF设计器或Expression Blend中时)。我试过这个:

public MainWindow()
{
    InitializeComponent();

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

设计者似乎没有调用Window类的构造函数。我需要在C#代码中创建示例数据,因为实例化它们更复杂。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果在XAML中直接或使用Binding设置DataContext,则可以避免构造函数跳过的问题。较新版本的工具还支持设置d:DataContext,只在设计时调用它来设置DataContext。如果你的实例化不能直接在XAML中完成(即构造函数参数),你可以在MainWindow.xaml.cs中声明一个get属性来实例化并返回你的设计数据实例。在getter中保持整个对象的创建将使它不会在运行时创建,因为它永远不会被调用。

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

然后在XAML中,您可以将窗口的d:DataContext绑定到新属性。

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

还有很多其他选项可以做到这一点,但这是最接近UI的,因此通常最容易添加到现有代码中。 Josh Smith最近对不同的选项做了很好的概述:Design-time data is still data

答案 1 :(得分:1)

现在我正在使用Visual Studio 2010和Expression Blend 4的设计时支持。这个新功能满足了我的大多数要求。

这如何运作显示在WPF Application Framework (WAF) BookLibrary 示例应用程序中。请下载.Net4版本的WAF。