Skip to main content
 首页 » 编程设计

c#之WPF:如何在设计模式下创建示例数据

2024年02月24日26insus

我想创建仅在设计模式下创建的示例数据(当 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