我想创建仅在设计模式下创建的示例数据(当WPF窗口显示在Visual Studio WPF设计器或Expression Blend中时)。我试过这个:
public MainWindow()
{
InitializeComponent();
if (DesignerProperties.GetIsInDesignMode(this))
{
DataContext = new Person() { Name = "Harry" };
}
}
设计者似乎没有调用Window类的构造函数。我需要在C#代码中创建示例数据,因为实例化它们更复杂。有什么想法吗?
答案 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。