私のViewModelには、それぞれが別のコレクションを含むオブジェクトのコレクションがあります。ネストされた ListView ItemTemplates を使用して、ビューにこれを表示しようとしています。これが私のViewModelコードの簡略化です:
public ViewModelObject
{
public ObservableCollection<OuterObject> OuterCollection { get; }
}
public OuterObject
{
public string OuterTitle;
public ObservableCollection<InnerObject> InnerCollection { get; }
}
public InnerObject
{
public string InnerTitle;
}
そして、これは、XAML でこの ViewModel を使用しようとしている方法を簡略化したものです。
<ListView ItemsSource="{Binding OuterCollection}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding OuterTitle}"/>
<ListView ItemsSource="{Binding InnerCollection}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding InnerTitle}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
内側の ListView を削除すると、外側の ListView バインディングは完全に正常に機能します。内部コレクション オブジェクトを内部 ListView に適切にバインドする方法がわかりません。{Binding OuterCollection.InnerCollection}
、{Binding DataContext.InnerCollection}
、およびで内部バインディングを実行しようとしました{Binding RelativeSource={RelativeSource TemplatedParent}, Path=InnerCollection}
が、これらすべてが原因でクラッシュします。このネストされたバインディングを実現する適切な方法は何ですか?
編集:LongListSelector
これは Windows Phone 7 から移植されたアプリケーション用であり、WinRT では利用できないの代替を見つける試みであることを付け加えておく必要があります。