1

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

public MainWindow()
{
    InitializeComponent();

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

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

4

2 回答 2

3

如果您在 XAML 中直接或使用 Binding 设置 DataContext,则可以避免构造函数跳过的问题。较新版本的工具还支持设置 ad: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 最近对不同的选项做了一个很好的概述:设计时数据仍然是数据

于 2010-05-04T20:41:08.110 回答
1

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

WPF 应用程序框架 (WAF)的BookLibrary示例应用程序显示了它的工作原理。请下载.Net4版本的WAF。

于 2010-07-10T09:09:17.630 回答