如何为ViewModel可混合创建数据模板(可在表达式混合中设计)。当我转到资源并尝试直接编辑DataTemplate时,我在Drawingborad上看到的是一个空白矩形。这是因为DataTemplate没有绑定任何东西。当然我可以创建一个UserControl并在那里的代码中创建一些设计时数据来查看模板,但我现在必须在资源(编辑)和用户控件(查看我的编辑结果)之间来回切换。是否有更直接的方式来编辑和查看我的DataTemplate?
答案 0 :(得分:25)
使用起来有点困难,但Blend有一个名为“设计时数据”的功能可以帮助你。一开始很难开始,但是一旦你做了一些,这很容易。这有点迫使你进入DataContext的一个很好的模式。
以下是关于此主题的良好链接:http://www.robfe.com/2009/08/design-time-data-in-expression-blend-3/
以下是一些选择摘录:
关于设计时尺寸
...设计时间属性可以 被其他工具和他们安全地忽略了 在运行时被忽略 (mc:Ignorable指定 带有“d”前缀的命名空间即可 忽略)。
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
Expression Blend使用两个设计时间 属性(d:DesignWidth, d:DesignHeight)指定大小 在设计时使用的控件......
关于设计时数据源
我偶然发现d:Datacontext 正在玩Blend 3并尝试过 在我的网站上添加“实时数据源” 窗口。我以为会这样 表现得像旧的方式 设置DataContext,但是当我跑的时候 我的申请,没有数据! ...
结果是,现在我们可以写了 像这样的代码:
... <Grid ... DataContext="{StaticResource GameDataSource}" d:DataContext="{StaticResource DesignTime_DateDataSource}">
请注意,如果您希望第一方支持这些功能,则适用于Blend 3。它们非常好 - 甚至还有设计时数据的设计者,尽管我还没有研究过这些功能。
应用于DataTemplates
这是我组成的东西,但似乎有效。在这里,我使用Design-Time数据功能将数据提取到visual元素的d:DataContext中。您必须为需要DataContext集的每个顶级元素执行 。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<!-- Resource dictionary entries should be defined here. -->
<DataTemplate x:Key="MyTemplate">
<TextBlock Text="{Binding Text}" d:DataContext="{StaticResource SampleDataSource}" />
</DataTemplate>
</ResourceDictionary>
如果您使用DataTemplate并使用DataType集,那么绑定语法会更明确一些,但它仍然有效:
<DataTemplate DataType="{x:Type vm:MyViewModel}" >
<TextBlock Text="{Binding Text}"
d:DataContext="{Binding Source={StaticResource SampleDataSource}}" />
</DataTemplate>
此策略将允许您在直接编辑时查看DataTemplate如何工作,但是除非您实际运行,否则您将无法在任何使用该DataTemplate的视图上看到结果应用程序。这是Blend的限制,因为它们似乎没有使用Mocks,而是完全替换对象。如果blend通过单击“New DataSource - &gt;基于引用对象 - &gt; MyCustomerObject”添加了创建新假数据源的功能,那么您将开始营业。
你可以通过自己的一些附属属性技巧来克服这个限制,但最多也是困难的。
<强>替代强>
可以在每个情况下工作的替代方案,但是设置起来有点麻烦,就是设置StaticResources,在运行时将伪数据换成真实数据,但在设计器中显示静态样本数据
这是Karl Shifflett的一篇非常好的文章,其中包括一些这些技巧和一些视频: http://karlshifflett.wordpress.com/2008/10/11/viewing-design-time-data-in-visual-studio-2008-cider-designer-in-wpf-and-silverlight-projects/
希望这有帮助, 安德森
答案 1 :(得分:1)
这个策略可以让你看到 DataTemplate如何工作 直接编辑它,但你不会 能够在任何视图上看到结果 除非使用DataTemplate 你真的运行应用程序。这是一个 到目前为止混合物的限制 他们似乎没有这样的事实 使用模拟,但相当完整 替换物体。如果混合了 增加了创造新假货的能力 通过单击“新建”来获取数据源 DataSource - &gt;基于Referenced 对象 - &gt; MyCustomerObject“,然后你 将开展业务。
如果我想使用真正的ViewModel模拟,我想这是创建实际ViewModel实例的最佳方式,并使用d:DataContext引用它们(例如使用ObjectDataProvider或x:Static)