问题标签 [design-data]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
940 浏览

wpf - 将 WPF 设计数据与 MVVM 模式一起使用

我在我们的 WPF 应用程序中使用 MVVM 模式来进行全面的单元测试。MVVM 模式本身运行良好,但是我正在努力适应模式,这意味着我可以使用 WPF 的设计时数据支持。

当我使用 Prism 时,通常会将 ViewModel 实例注入到视图的构造函数中,就像这样

然后将 ViewModel 的依赖项注入到构造函数中,就像这样

这通常工作得很好,除非涉及到设计数据 - 我想避免将设计数据特定类编译到我发布的程序集中,所以我选择使用该{d:DesignData}方法而不是该{d:DesignInstance}方法,但是为了使其正常工作我的ViewModel 现在需要有一个无参数的构造函数。此外,为了能够在 XAML 中设置这些属性,我还经常需要更改其他属性以具有设置器或成为可修改的集合。

这让我很担心:

  • 我有一个无参数的构造函数,它永远不会被调用,也没有经过单元测试
  • 有一些属性的设置器,只有 ViewModel 本身应该调用
  • 我的 ViewModel 现在是应该由视图修改的属性和不应该修改的属性的混合体——这使得一眼就很难判断哪段代码负责维护任何给定的属性
  • 在设计时设置某些属性(例如查看Filter文本样式)实际上最终会调用 ViewModel 逻辑!(所以我的 ViewModel 还需要容忍在设计时缺少其他强制依赖项)

有没有更好的方法在 WPF MVVM 应用程序中获取设计时数据,并且不会以这种方式损害我的 ViewModel?

或者,我是否应该以不同的方式构建我的 ViewModel,以便它具有更简单的属性,并将逻辑分离到其他地方。

0 投票
0 回答
126 浏览

c# - 如何为 CollectionView 生成 DesignData?

我在 xaml 中有一个 DataGrid,它从来自 ViewModel 的 ListCollectionView 中获取数据。

如何创建填充 ListCollectionView 的 DesignData 文件?由于 ListCollectionView 构造函数有一个参数(列表),我不知道如何在 DesignData xaml 文件中创建 ListCollectionView。

如果我有以下 xaml:

以及以下设计数据:

一切正常。

如果我将 xaml 更改为:

而 GroupedParameters 是一个 ListCollectionView,我该如何创建 DesignData?

0 投票
1 回答
299 浏览

wpf - d:DesignData FileNotFoundException

我尝试使用 DesignData 在设计时填充 ItemsControl。

文件 /DesignData/SampleAlerts.xaml 的内容是:

并且文件 /DesignData/SampleAlerts.xaml 的构建操作设置为 DesignData。

当我尝试在 UI 中使用此设计数据时:

在 VisualStudio 中,一切正常,但在 Visual Studio 设计器中出现以下异常:

而且在 Blend 中,一切构建良好,但设计器显示以下错误: - 类型“AlertSource”是抽象的,必须包含显式值。Ln 1 Col 0 - 成员“警报”无法识别或无法访问。LN 7 栏 4

AlertSource 和 AlertBase 类型是具有以下骨架的抽象类:

有人知道如何解决这个问题吗?

0 投票
0 回答
147 浏览

c# - 在 WPF 中使用 DesignData 而不将其包含在构建中

我有一些绑定到 d:DataContext 的设计时视图模型,如下所示:

我改变Build Action了每一个ViewModelCompileDesignDataWithDesignTimeCreatableTypes

它正在设计时工作,但是当我尝试编译时出现以下错误:

如何防止我的示例数据附加到程序集?或者也许这不是必需的,即使在Compile设置时,编译器也不会默认将这些文件包含到可执行文件中?

// 编辑:

另外 - 当我在命名空间中创建一个空类时,一切都在工作和编译DesignTime

但是我可以在不更改命名空间或为编译时提供空命名空间的情况下做到这一点吗?

0 投票
1 回答
793 浏览

c# - XAML 设计数据和静态资源/集合视图

我已经使用设计时 XAML 数据几个星期了,它似乎工作正常,除了某些情况,例如我希望列表框根据声明为资源的集合视图显示项目的当前情况。

基本上我想显示按类别分组的“事物”列表。

然后我通过一个虚拟类 ListOfThings 公开它

我有一个用于数据的虚拟 XAML 文件,如下所示(XMLFile1.xaml)

在窗口中,我有一个带有组样式的列表框,用于每个组的扩展器

这在运行时有效(我创建了一个 ListOfThings 实例,填充 Observable 集合以具有与 XAML 设计数据相同的结构)但在设计时我什么也得不到。

如果我将 ItemSource 更改为直接绑定到事物的 ObservableCollection 而不是集合视图,它可以工作,但我当然没有分组。

我是否误解了静态资源的某些内容,因为它们在设计时不可用?因此,为什么绑定到 collectionview 不呈现?

还是对 Source 的绑定语法不正确?

0 投票
1 回答
222 浏览

c# - 如何将 DesignData 绑定到单个属性

我正在尝试将我的设计数据绑定到Grid中的单个属性(Margin)。我不想覆盖整个网格的数据上下文(这也是使用设计数据

设置为 DataContext 的设计数据按预期工作。

但是,我无法弄清楚如何将设计数据直接分配为 Margin 的 Binding Source。

上面的行给出了以下错误:

错误 1 ​​XML 命名空间“ http://schemas.microsoft.com/expression/blend/2008 ”中不存在标记“DesignData” 。第 13 行位置 135。

谢谢!

0 投票
1 回答
101 浏览

c# - 如何使用 DesignData 在组合框中指定 SelectedItem 元素?

我正在 WPF 中做一个应用程序,并且我正在使用 DesignData 来加快 UI 创建过程,因为启动应用程序是一个缓慢的过程。

我找不到用设计数据设置组合框的 SelectedItem 的方法。检查以下示例:

XAML:

视图模型:

和设计数据:

似乎组合框期望从可用项目集合中接收一个元素,但我不知道如何从设计数据文件中引用这些元素之一。

有什么提示吗?

0 投票
1 回答
1007 浏览

c# - 加载页面资源的设计模式错误“对象与目标类型不匹配”

我目前正在尝试通过为我的 ViewModel 使用设计数据来模拟我的视图的数据。具体来说,我的 silverlight 应用程序有一个 View 前端和一个 ViewModel 后端。

当我模拟了其他视图时,一切都很顺利。即使在这个特定的观点中,唯一的问题似乎必须与集合有关。

知道为什么当我尝试为“CategoryName”分配值时我的“CategoryItem”总是给我一个错误吗?我不知道是什么导致了这个问题......

下面的代码:

我的设计数据:

我的简化视图模型:

最后,我的(简化的)观点:

0 投票
1 回答
53 浏览

c# - 在 Windows 通用集合中使用 DesignData

在一个非常简单的案例中,我正在努力使用 DesignData。我在 Windows 通用项目中定义了以下琐碎的控件

类定义如下:

类型为 ElementCollection 的元素“集合”在 codeBehind 中定义,以提供有效的绑定源。

Single.xaml 很简单:

倍数同样如此:

在 Designer 中查看时,我们应该看到上面的设计数据。确实,控制在网格的第一行中正确地将“单一”显示为名称。但是,控件在网格的第二行中没有显示任何内容。

我显然错过了一些明显的东西......

0 投票
1 回答
5835 浏览

c# - 绑定到 WPF 中的设计数据

我有一个包含 ListBox 的 WPF 窗口。ItemsSource 绑定到视图模型的属性。

视图模型的属性是自定义接口的可观察集合;ISome 接口。该接口非常简单,由另外覆盖 ToString 的 SomeClass 实现。

当我在 Visual Studio 2015 或 Blend 中查看窗口时,一切都符合预期。调用 ToString 并填充 ListBox。

混合截图

我已经创建了我想在设计模式下使用的 XAML 设计数据。我已将设计数据添加到名为 SampleData 的目录中。我在第一个 DataContext 正下方的窗口 XAML 中添加了一个设计 datacontext 语句。

这行不通。无论我将什么用于源路径,Visual Studio 和 Blend 都会报告“找不到文件或项目项”。我试过 /SampleData/Data.xaml、SampleData/Data.xaml、../SampleData/Data.xaml、./../SampleData/Data.xaml

如果我将 Data.xaml 移出 SampleData 目录并移到项目根目录中,Visual Studio 和 Blend 只会找到它。然后我可以使用源路径 /Data.xaml 或 Data.xaml 来引用它。如果我使用 Data.xaml 而不使用 / 前缀,则 Visual Studio 和 Blend 报告找不到该文件.. 但无论如何都可以找到它。

我的第一个问题是.. 我可以在子目录中使用示例数据吗?如果是这样怎么办?

在项目根目录中成功引用 Data.xaml 后,我的窗口没有调用重写的 ToString,因此我得到了显示的类名列表。该列表与设计数据具有相同数量的项目,因此看起来它正在使用设计数据。

我的第二个问题是.. 如果对象是从代码中实例化的,为什么不在这里调用被覆盖的 ToString?

我知道我可以通过指定一个项目模板来达到预期的结果。

完整的源代码可用于 github 上的示例应用程序

https://github.com/DangerousDarlow/WpfDesignData

更新

感谢 jstreet 的回答。我更改了子目录中 data.xaml 的文件属性,现在可以将其用作设计数据。我以为我以前试过这个,但我一定是弄错了。

我仍然没有看到 ToString 被调用。我尝试将视图模型属性更改为List<object>and ,List<ISomeInterface>但都导致调用 object.ToString; 由类名的显示推断。我可能会停止关注这一点,因为无论如何我都不会使用 ToString,我将绑定到我想要显示的属性。不过,最好解释一下行为上的差异。

我正在使用 Visual Studio 2015 社区版。