2010-05-10 7 views
4

Donc j'essaye de me lier à une liste dans un élément ListView mais je n'arrive pas à obtenir la liaison correcte. Si quelqu'un pouvait m'aider avec la reliure corrigée ce serait génial!WPF - Liaison à une liste dans un élément Listview

Voici la source que vous aurez probablement besoin:

//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; } 
} 

Le XAML que je suis en train de fixer est au-dessous

<!-- 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> 

Si vous avez besoin de plus de code source s'il vous plaît laissez-moi savoir. Merci beaucoup!

+0

Donc mon code a été détruit dans le processus de publication ... Ne me demandez pas à quoi cela ressemblait dans l'aperçu. Je vais essayer de repasser XAML – Josh

Répondre

1

Ok, donc après un peu plus de tromperie j'ai finalement trouvé comment le faire. Apparemment, ceci:

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

N'est pas valide même si elle n'a pas traversé et erreur. Lorsque vous spécifiez un ItemSource pour une vue de liste, vous ne pouvez pas utiliser la balise ListViewItem dans ListView. Donc j'ai retravaillé mon code dans ce qui suit:

<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> 
Questions connexes