1

默认的 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" />

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

4

2 回答 2

2

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

我意识到您的问题是询问是否使用 d:DesignInstance,它也适用于这种类型的技术——只是在那篇文章中没有演示。

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

于 2012-10-01T22:38:08.260 回答
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}}"/>

在设计器中绑定Source给我带来了无穷无尽的麻烦。但这更让我恼火,因为我知道我永远不会这样做。这就是我想做的:

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

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

你最好有一个很好的理由来做你的方法!

祝你好运!

于 2012-10-04T00:20:07.423 回答