WPF - binding to a list in a list item

So, I am trying to bind to a list in a ListView element, but I cannot force to bind it correctly. If someone can help me with a fixed binding, that would be great!

Here is the source you are likely to need:

//class that xaml is initially bound to public partial class UploadMngPanel : Grid { .... //initial list to bind to public ObservableCollection<FinishedAnimeCollection> UploadedAnime { get { return uploadedAnime; } } } public class FinishedAnimeCollection { ... //second list to bind to private ObservableCollection<AnimeEpisodeItem> _episodes = new ObservableCollection<AnimeEpisodeItem>(); public ObservableCollection<AnimeEpisodeItem> Episodes { get { return _episodes; } } } public class AnimeEpisodeItem { public String Title { get; set; } public DateTime TimeAdded { get; set; } } 

XAML I'm trying to fix below

 <!-- First list binding here (this works)--> <ListView Name="finishedView" ItemsSource="{Binding UploadedAnime}"> <ListView.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="AnimeExpander.xaml"/> </ResourceDictionary.MergedDictionaries> <DataTemplate x:Key="AnimeRow"> <DockPanel> <!-- <Image Height="75" Width="Auto" Source="{Binding Image}" DockPanel.Dock="Left" VerticalAlignment="Top"/> --> <Expander Template="{StaticResource AnimeExpanderControlTemplate}" Header="{Binding AnimeTitle}"> <Expander.ContentTemplate> <DataTemplate> <Border BorderBrush="Black" BorderThickness="1,1,1,1"> <!--Second list binding here (this doesn't work)--> <ListView ItemsSource="{Binding Path=Episodes}"> <ListViewItem> <DockPanel> <TextBlock Text="{Binding Title}" DockPanel.Dock="Left" /> <!--<TextBlock Text="{Binding TimeAdded}" DockPanel.Dock="Right" />--> </DockPanel> </ListViewItem> </ListView> </Border> </DataTemplate> </Expander.ContentTemplate> </Expander> </DockPanel> </DataTemplate> </ResourceDictionary> </ListView.Resources> <ListView.View> <GridView> <GridViewColumn Width="700" Header="Anime" CellTemplate="{StaticResource AnimeRow}"/> </GridView> </ListView.View> </ListView> 

If you need any other source code, please let me know. Many thanks!

+4
source share
1 answer

Okay, so after a little downcast, I finally found out how to do it. Apparently this:

  <ListView ItemsSource="{Binding Path=Episodes}"> <ListViewItem> <DockPanel> <TextBlock Text="{Binding Title}" DockPanel.Dock="Left" /> <!--<TextBlock Text="{Binding TimeAdded}" DockPanel.Dock="Right" />--> </DockPanel> </ListViewItem> </ListView> 

Not valid even if this did not happen and error. When you specify an ItemSource to view a list, you cannot use the ListViewItem tag in a ListView. So I reworked my code as follows:

 <TabItem Header="Finished"> <TabItem.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="AnimeExpander.xaml"/> </ResourceDictionary.MergedDictionaries> <DataTemplate x:Key="EpisodeItem"> <DockPanel Margin="30,3"> <TextBlock Text="{Binding Title}" DockPanel.Dock="Left" /> <WrapPanel Margin="10,0" DockPanel.Dock="Right"> <TextBlock Text="Finished at: " /> <TextBlock Text="{Binding TimeAdded}" /> </WrapPanel> </DockPanel> </DataTemplate> <DataTemplate x:Key="AnimeItem"> <DockPanel Margin="5,10"> <Image Height="75" Width="Auto" Source="{Binding ImagePath}" DockPanel.Dock="Left" VerticalAlignment="Top"/> <Expander Template="{StaticResource AnimeExpanderControlTemplate}" > <Expander.Header> <TextBlock FontWeight="Bold" Text="{Binding AnimeTitle}" /> </Expander.Header> <ListView ItemsSource="{Binding Episodes}" ItemTemplate="{StaticResource EpisodeItem}" BorderThickness="0,0,0,0" /> </Expander> </DockPanel> </DataTemplate> </ResourceDictionary> </TabItem.Resources> <ListView Name="finishedView" ItemsSource="{Binding UploadedAnime, diagnostics:PresentationTraceSources.TraceLevel=High}" ItemTemplate="{StaticResource AnimeItem}" /> </TabItem> 
+1
source

Source: https://habr.com/ru/post/1309352/


All Articles