2009-10-16 19 views
9

私はここではっきりと何かを見逃しているかもしれないので、これは本当にばかな質問である場合はお詫び申し上げます。 ViewModelのObservableCollectionにバインドする必要があるビュー内にWrapPanelがあります。このObservableCollectionには、WrapPanelで表示されたときに別のタイプのビューにバインドする必要がある、異なるタイプのViewModelが含まれています。目的は、WrapPanelに追加する必要のある小さなビューのインスタンスを介して表示されるラップ可能なアイテムのリストを作成することです。ObservableCollectionアイテムをWrapPanelのUserControlにバインドしますか?

MVVMを使用していますが、ViewModelはビューに直接アクセスできません。可能であればViewModelとViewの間にバインディングを作成しないでください。手動でWrapPanel.Childrenコレクションにアイテムを追加することは実行可能なオプションではありません。子ビューモデルのコレクションをWrapPanelにバインドして別のビューのインスタンスを作成し、それを自分自身に追加する方法については、私は迷っています。私は単に問題に間違って近づいていますか?おそらくDataTemplateが関与していると思われますが、WrapPanelにはDataTemplateがあり、バインド可能ではありません。

ありがとうございました。

+0

同じコレクション内に異なるビューモデルを持つ状況があるように聞こえます。これらのビューモデルのそれぞれには、独自の関連ビューがあります。これらのVMをコンテナに表示する場合、各ビューを1つ追加レベルでラップする必要がありますか? (別々の要素の周りの境界線のように) –

+0

コレクションにはすべて同じタイプ(この場合はServiceMonitorViewModel)が含まれています。私はちょうど彼らの親ビューでラップ可能なコンテナに表示する必要があります。 – jrista

答えて

19

何項目のすべてをホストするためにWrapPanelを使用してリストビューです。

<ListView ItemsSource={...}> 
    <ListView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel IsItemsHost="True" /> 
    </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <!-- Fill in how you want each item to look here --> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

洞察力アンドリューに感謝します。私はこれをして、別の問題に遭遇しました。私はあなたもこれで助けてくれることを願っています。そうでなければ別の質問を始めます。私は、私のUserControlをDataTemplateに投げました。次のエラーが表示されます。 'ServiceMonitorView'タイプのインスタンスを作成できませんでした。ユーザーコントロールにはデフォルトの生成されたコンストラクタの外側にゼロコードがあります。そのため、例外をスローするコンストラクタコードはありません。 – jrista

+0

@rista:それは独立した質問に属する別の問題だと私は言います。 (私は答えは分かりませんが、私はそれが何であるかに興味があります) –

14

は、のItemsControlを使用し、WrapPanelにそのItemsPanelを設定する:あなたが必要

<ItemsControl ItemsSource="{Binding Something}" ItemTemplate="{StaticResource YourDataTemplate}"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel /> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

これはすばらしいです...銀色で素晴らしい作品... – Anirudha

関連する問題