2010-05-04 26 views
1

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

public MainWindow() 
{ 
    InitializeComponent(); 

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

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

+1

http://www.galasoft.ch/mydotnet/articles/article-2007091401.html – user7116 2010-05-04 20:25:07

+0

使用来自@sixlettervariables的链接我管理它通过使用代码工作。关键是在XAML中创建资源 - 我的自定义DataProvider的实例,使用无参数构造函数填充我的数据。 – surfen 2011-11-28 21:03:24

回答

1

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

该工作原理如下所示BookLibrary示例应用程序WPF Application Framework (WAF)。请下载WAF的.Net4版本。

3

如果您在XAML中直接或通过绑定来设置DataContext,则可避免构造函数跳过的问题。新版本的工具还支持设置d:DataContext,该设计时只会调用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}" 

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

+2

感谢您的回答 - 您的解决方案看起来非常棒。不幸的是,我用VS2010试了一下,但没有奏效。这个绑定真的适用于d:DataContext吗? – jbe 2010-05-04 21:17:23

+0

也不适用于我。 – surfen 2011-11-28 20:04:31