Nel mio ViewModel ho una collezione di oggetti che contengono ciascuno un'altra collezione. Sto cercando di visualizzarlo nella mia vista usando ListView ItemTemplates nidificati. Ecco una semplificazione del mio codice ViewModel:Come associare dati ListView ItemTemplates nidificati in Metro/WinRT?
public ViewModelObject
{
public ObservableCollection<OuterObject> OuterCollection { get; }
}
public OuterObject
{
public string OuterTitle;
public ObservableCollection<InnerObject> InnerCollection { get; }
}
public InnerObject
{
public string InnerTitle;
}
E qui è una semplificazione di come sto cercando di utilizzare questo ViewModel nel mio 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>
Se rimuovo il ListView interno, il Il binding esterno di ListView funziona perfettamente. Non riesco proprio a capire come associare correttamente l'oggetto della raccolta interna al ListView interno. Ho provato a eseguire la rilegatura interna con {Binding OuterCollection.InnerCollection}
, {Binding DataContext.InnerCollection}
e {Binding RelativeSource={RelativeSource TemplatedParent}, Path=InnerCollection}
, ma tutti questi causano l'arresto anomalo. Qual è il modo corretto per raggiungere questo legame annidato?
EDIT: Dovrei aggiungere che questo è per un'applicazione in fase di porting da Windows Phone 7, ed è un tentativo di trovare un sostituto per LongListSelector
, che non è disponibile in WinRT.
Questo ha funzionato per me! Sono impazzito cercando di capirlo. Un problema: hai dovuto cambiare {Binding InnerTitle} con qualcos'altro? Sto vedendo tutti i miei elementi ListView creati correttamente, ma {Binding InnerTitle} non funziona. – Weston
Nevermind - il mio problema era che non mi ero reso conto che 'nome stringa pubblico;' non vincola, mentre 'stringa pubblica Nome {get; impostato; } fa. – Weston