jok*_*efe 7 c# data-binding microsoft-metro windows-runtime winrt-xaml
在我的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;
}
Run Code Online (Sandbox Code Playgroud)
以下是我在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>
Run Code Online (Sandbox Code Playgroud)
如果我删除内部ListView,外部ListView绑定完全正常.我只是无法弄清楚如何将内部集合对象正确绑定到内部ListView.我已经尝试用{Binding OuterCollection.InnerCollection},{Binding DataContext.InnerCollection}和{Binding RelativeSource={RelativeSource TemplatedParent}, Path=InnerCollection},做内部绑定,但所有这些导致它崩溃.实现此嵌套绑定的正确方法是什么?
编辑:我应该补充一点,这是一个从Windows Phone 7移植的应用程序,它是一个尝试找到替代品LongListSelector,这在WinRT中不可用.
我想出了解决方案!它需要我以前尝试过的解决方案的组合.嵌套ListView中内部集合的正确绑定是:
{Binding RelativeSource={RelativeSource TemplatedParent},
Path=DataContext.InnerCollection}
Run Code Online (Sandbox Code Playgroud)
此外,根据您对嵌套ListView的目的,我发现最好使用ItemsView作为外部集合,使用ListView作为内部集合.否则,两个控件的可选择性相互重叠.
| 归档时间: |
|
| 查看次数: |
8749 次 |
| 最近记录: |