bit*_*onk 16 wpf datatemplate expression-blend
如何为ViewModel可混合(可在表达式混合中设计)创建Datatemplate.当我转到资源并尝试直接编辑DataTemplate时,我在Drawingborad上看到的是一个空白矩形.这是因为DataTemplate没有绑定任何东西.当然我可以创建一个UserControl并在那里的代码中创建一些设计时数据来查看模板,但我现在必须在资源(编辑)和用户控件(查看我的编辑结果)之间来回切换.是不是有更直接的方式来编辑和查看我的DataTemplate?
And*_*mes 25
使用起来有点夸张,但Blend有一个名为"设计时数据"的功能可以帮助你.一开始很难开始,但是一旦你做了一些,这很容易.这有点迫使你成为DataContext的一个很好的模式.
这是关于这个主题的一个很好的链接:http://www.robfe.com/2009/08/design-time-data-in-expression-blend-3/
这里有一些选择摘录:
关于设计时尺寸
...设计时属性可以被其他工具安全地忽略,并且在运行时被忽略(mc:Ignorable指定可以忽略带有"d"前缀的命名空间).
Run Code Online (Sandbox Code Playgroud)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)来指定在设计时使用的控件的大小......
关于设计时数据源
当我在玩Blend 3时尝试添加"实时数据源"到我的窗口时,我偶然发现了d:Datacontext.我认为它的行为就像设置DataContext的旧方式一样,但是当我运行我的应用程序时,没有数据!...
结果是,现在我们可以编写这样的代码:
Run Code Online (Sandbox Code Playgroud)... <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>
Run Code Online (Sandbox Code Playgroud)
如果您使用DataTemplate并使用DataType集,则绑定语法会更加明确,但它仍然有效:
<DataTemplate DataType="{x:Type vm:MyViewModel}" >
<TextBlock Text="{Binding Text}"
d:DataContext="{Binding Source={StaticResource SampleDataSource}}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
此策略将允许您在直接编辑时查看DataTemplate的工作方式,但是除非您实际运行该应用程序,否则您将无法在使用该DataTemplate的任何视图上看到结果.这是Blend的限制,因为它们似乎没有使用Mocks,而是完全替换对象.如果blend通过单击"New DataSource - >基于Referenced Object - > MyCustomerObject"添加了创建新假数据源的功能,那么您将开始营业.
你有可能通过自己的一些附属属性技巧克服这个限制,但最多也是困难的.
替代
在每种情况下都可以使用的替代方案,但是设置起来有点麻烦,就是设置StaticResources,在运行时将伪数据换成真实数据,但在设计器中显示静态样本数据.
这是Karl Shifflett的一篇非常好的文章,其中包括一些这些技术和一些视频:http: //karlshifflett.wordpress.com/2008/10/11/viewing-design-time-data-in-visual-studio -2008-苹果酒设计师在-WPF-和Silverlight的项目/
希望这有帮助,安德森