在我的 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}
,但所有这些都会导致它崩溃。实现这种嵌套绑定的正确方法是什么?
编辑:我应该补充一点,这是从 Windows Phone 7 移植的应用程序,它试图找到LongListSelector
WinRT 中不可用的替代品。