如何定义单个可混合设计时间实例?

时间:2012-10-01 21:09:53

标签: data-binding windows-8

默认的Windows 8项目模板在模板中有一个CollectionViewSource。

<CollectionViewSource
       x:Name="itemsViewSource"
       Source="{Binding Model.Invitations}"
       d:Source="{Binding Invitations, Source={d:DesignInstance Type=vm:DesignerFilteredInvitations, IsDesignTimeCreatable=True}}" />

显然并非所有页面都有一个集合作为模型,您可以像这样定义一个DataContext:

<vm:MySingleItemViewModel x:Key="Model" />

如何为这种模型定义设计实例?

2 个答案:

答案 0 :(得分:2)

嗯,设计时间数据最好这样完成:http://blog.jerrynixon.com/2012/08/most-people-are-doing-mvvm-all-wrong.html

我意识到你的问题是询问使用d:DesignInstance,它也适用于这种技术 - 只是在那篇文章中没有证明。

它需要的只是一个好的构造函数。

答案 1 :(得分:1)

好的,使用它可以正常工作:

<Page 
d:DataContext="{d:DesignInstance Type=Models:ViewModel, IsDesignTimeCreatable=True}"

使用它可以正常工作:

<d:Page.DataContext>
    <Models:ViewModel/>
</d:Page.DataContext>

我必须告诉你,后者也是一种更简单的方法。这也是Visual Studio在设计器中设置数据源时将生成的内容。它还为您提供完全类型的绑定。但要么是可以接受的。

另一个说明。我没有理由将对象直接设置为CollectionViewSource的源。通常,您将CVS的Source属性绑定到ViewModel中的属性。但是,鉴于你的问题:这是如何:

<CollectionViewSource 
    x:Name="TestCVS" Source="{Binding}"
    d:DataContext="{Binding Source={d:DesignInstance Type=Models:ViewModel, IsDesignTimeCreatable=True}}"/>

绑定到设计师的来源给我带来了无穷无尽的麻烦。但它更让我恼火,因为我知道我永远不会这样做。这就是我想要做的事情:

<d:Page.DataContext>
    <Models:ViewModel/>
</d:Page.DataContext>

<Page.Resources>
    <CollectionViewSource x:Name="TestCVS" Source="{Binding}" />
</Page.Resources>

你最好有理由采取行动!

祝你好运!