首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在WPF中有哪些方法可用于虚拟设计时数据?

在WPF中有哪些方法可用于虚拟设计时数据?
EN

Stack Overflow用户
提问于 2009-12-12 02:25:08
回答 8查看 38.7K关注 0票数 100

我在没有使用表达式混合的情况下工作,只使用vs2010中的XAML编辑器。抛开这一点不谈,我越来越多地看到设计时数据绑定的需求。对于简单的情况,FallbackValue属性工作得非常好(Textboxes和TextBlocks等)。但特别是在处理ItemsControl之类的东西时,确实需要示例数据在设计器中可见,这样您就可以调整和调整控件和数据模板,而不必运行可执行文件。

我知道ObjectDataProvider允许绑定到类型,因此可以提供用于可视化的设计时数据,但也有一些变通,允许通过加载设计时、虚拟数据和运行时绑定来绑定真正的运行时数据,而不会浪费资源。

我真正想要的是能够让"John“、"Paul”、"George“和"Ringo”在XAML designer中作为样式项显示在我的ItemsControl中,但在应用程序运行时显示真实的数据。

我还知道Blend允许一些奇特的属性,这些属性定义了WPF在运行时条件下实际上忽略的设计时绑定数据。

所以我的问题是:

XAML 1.如何在visual studio 设计器中利用集合和非琐碎数据的设计时绑定,然后平滑地切换到运行时绑定?

2.其他人是如何解决设计时和运行时数据的问题的?在我的例子中,我不能很容易地对两者使用相同的数据(比如数据库查询)。

XAML3.XAML3.Expression blend的替代品是否可以用于数据集成的设计?(我知道有一些替代品,但我特别想要一些我可以使用并查看绑定样本数据的东西,等等?)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-03-20 20:28:47

通过使用VS2010,您可以使用Design-Time attributes (同时适用于SL和WPF)。我通常都有一个模拟的数据源,所以这只是一个问题:

  • 添加命名空间声明

将模拟数据上下文xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

  • Adding到窗口/控件资源

  • Setting视图模型x:Key="DesignViewModel"/> MockXViewModel设计时数据上下文

<网格d:DataContext="{Binding Source={StaticResource DesignViewModel}}“...

工作得很好。

票数 121
EN

Stack Overflow用户

发布于 2017-04-03 20:14:10

作为Goran被接受的答案和Rene的优秀评论的混合体。

  • 添加名称空间声明。从代码中xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  • Reference你的设计时数据上下文。

<Grid d:DataContext="{d:DesignInstance Type=ViewModels:MockXViewModel, IsDesignTimeCreatable=True}" ...

票数 17
EN

Stack Overflow用户

发布于 2015-07-24 14:26:03

我使用这种方法在.NET 4.5和Visual Studio2013中生成设计时数据。

我只有一个ViewModel。视图模型有一个属性IsInDesignMode,它告诉我们设计模式是否处于活动状态(请参见类ViewModelBase)。然后,您可以在视图模型构造函数中设置设计时数据(如填充items控件)。

此外,我不会在视图模型构造函数中加载实际数据,这可能会在运行时导致问题,但在设计时设置数据应该不是问题。

代码语言:javascript
复制
public abstract class ViewModelBase
{
    public bool IsInDesignMode
    {
        get
        {
            return DesignerProperties.GetIsInDesignMode(new DependencyObject());
        }
    }
}

public class ExampleViewModel : ViewModelBase
{
    public ExampleViewModel()
    {
        if (IsInDesignMode == true)
        {
            LoadDesignTimeData();
        }
    }

    private void LoadDesignTimeData()
    {
        // Load design time data here
    }       
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1889966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档