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

发布于 2024-08-31 11:05:57 字数 355 浏览 6 评论 0 原文

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

public MainWindow()
{
    InitializeComponent();

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

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

I would like to create sample data which are created only in design mode (When the WPF Window is shown in the Visual Studio WPF Designer or in Expression Blend). I tried this:

public MainWindow()
{
    InitializeComponent();

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

It seems that the designer doesn't call the constructor of the Window class. I need to create the sample data in C# code because they are more complicated to instantiate. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

榕城若虚 2024-09-07 11:05:58

如果您在 XAML 中直接或使用 Binding 设置 DataContext,则可以避免构造函数跳过的问题。该工具的较新版本还支持设置 ad: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 最近对不同的选项做了很好的概述: 设计时数据仍然是数据

If you do the setting of the DataContext in XAML, either directly or with a Binding, you avoid the issue of constructor skipping. The newer versions of the tools also support setting a d:DataContext that will only be invoked at design time to set the DataContext. If your instantiation can't be done directly in XAML (i.e. constructor parameters) you can just declare a get property in MainWindow.xaml.cs to instantiate and return your design data instance. Keeping the entire object creation in the getter will keep it from being created at run-time because it will never be called.

public MyData { get { return new Person() { Name = "Harry" }; } }

Then in XAML you can bind d:DataContext for the window to the new property.

d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=MyData}"

There are many other options for doing this but this is the closest to the UI so usually the easiest to add into existing code. Josh Smith recently did a good overview of different options: Design-time data is still data

隔纱相望 2024-09-07 11:05:58

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

BookLibrary 示例应用程序显示了其工作原理>WPF 应用程序框架 (WAF)。请下载.Net4版本的WAF。

Now I’m using the design-time support of Visual Studio 2010 and Expression Blend 4. This new feature meets most of my requirements.

How this works is shown in the BookLibrary sample application of the WPF Application Framework (WAF). Please download the .Net4 version of WAF.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文