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

标签 c# wpf designmode sample-data

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

相关文章:

c# - 相当于 C# 中 VB6 中的 string * 10

c# - asp.net存储过程输入/输出参数

wpf - 使用项目中文件夹中的自定义控件?

browser - 使用 WebBrowser.DocumentText 和 DomDocument.DesignMode 的应用程序在 IE8 中工作,在 IE9 中不起作用

c# - 开始 C# 注释 block 的星号数量

c# - Facebook 与 dot net 的集成

c# - 如何处理动态放置标签的重叠

wpf - 如何在WPF中使用复选框开发TreeView?

html - DIV Contenteditable展开问题