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}}"/>

デザイナーでソースにバインドすると、際限のない問題が発生しました。しかし、私はこのように決してしないことを知っていたので、それは私をもっといらいらさせました. これが私がやりたかったことです:

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

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

あなたのアプローチには大きな理由があるはずです!

頑張ってください!

于 2012-10-04T00:20:07.423 に答える