我想创建仅在设计模式下创建的示例数据(当 WPF 窗口显示在 Visual Studio WPF 设计器或 Expression Blend 中时)。我试过这个:
public MainWindow()
{
InitializeComponent();
if (DesignerProperties.GetIsInDesignMode(this))
{
DataContext = new Person() { Name = "Harry" };
}
}
看来设计者并没有调用Window类的构造函数。我需要在 C# 代码中创建示例数据,因为它们的实例化更复杂。有什么想法吗?
最佳答案
如果直接或使用绑定(bind)在 XAML 中设置 DataContext,则可以避免构造函数跳过的问题。较新版本的工具还支持设置 d:DataContext,它只会在设计时调用以设置 DataContext。如果您的实例化不能直接在 XAML 中完成(即构造函数参数),您可以在 MainWindow.xaml.cs 中声明一个 get 属性来实例化并返回您的设计数据实例。将整个对象创建保留在 getter 中将防止它在运行时被创建,因为它永远不会被调用。
public MyData { get { return new Person() { Name = "Harry" }; } }
然后在 XAML 中,您可以将窗口的 d:DataContext 绑定(bind)到新属性。
d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=MyData}"
执行此操作还有许多其他选项,但这是最接近 UI 的选项,因此通常最容易添加到现有代码中。 Josh Smith 最近对不同的选择做了很好的概述:Design-time data is still data
关于c# - WPF:如何在设计模式下创建示例数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2768680/