在我的ViewModel中,我有一个包含另一个集合的对象集合。我尝试通过使用嵌套的ListView ItemTemplates在我的View中显示它。这是我的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迁移过来的应用程序,并且是为了寻找取代WinRT中不可用的LongListSelector的替代方案。
public string Name;
不会绑定,而public string Name { get; set; }
会。 - Weston