W moim ViewModelu mam kolekcję obiektów, z których każda zawiera inną kolekcję. Próbuję wyświetlić to w moim widoku przy użyciu zagnieżdżonych ListView ItemTemplates. Tutaj jest uproszczenie mojego kodu ViewModel:Jak powiązać dane zagnieżdżonych ListView ItemTemplates w Metro/WinRT?
public ViewModelObject
{
public ObservableCollection<OuterObject> OuterCollection { get; }
}
public OuterObject
{
public string OuterTitle;
public ObservableCollection<InnerObject> InnerCollection { get; }
}
public InnerObject
{
public string InnerTitle;
}
I tu jest uproszczenie sposobu Próbuję użyć tego ViewModel w moim XAML:
<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>
Jeśli usunąć wewnętrzną ListView, zewnętrzne powiązanie ListView działa doskonale. Po prostu nie mogę dowiedzieć się, jak poprawnie powiązać wewnętrzny obiekt kolekcji z wewnętrznym ListView. Próbowałem wykonać wewnętrzne powiązanie z {Binding OuterCollection.InnerCollection}
, {Binding DataContext.InnerCollection}
i {Binding RelativeSource={RelativeSource TemplatedParent}, Path=InnerCollection}
, ale wszystkie z nich powodują awarię. Jaki jest właściwy sposób osiągnięcia tego zagnieżdżonego powiązania?
EDIT: należy dodać, że jest to dla aplikacji przenoszony z Windows Phone 7 i jest próbą znalezienia zastępstwa dla LongListSelector
, który nie jest dostępny w WinRT.
To zadziałało dla mnie! Szaleję, próbując to rozgryźć. Jedna kwestia - czy musiałaś zmienić {Binding InnerTitle} na coś innego? Widzę, że wszystkie moje elementy ListView zostały poprawnie utworzone, ale {Binding InnerTitle} nie działa. – Weston
Nevermind - moim problemem było to, że nie zdawałem sobie sprawy z "public string Name;" nie wiąże, a 'public string Name {get; zestaw; } 'robi. – Weston