默认的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" />
如何为这种模型定义设计实例?
答案 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>
你最好有理由采取行动!
祝你好运!