WPF - привязка к списку в элементе списка - PullRequest
5 голосов
/ 10 мая 2010

Итак, я пытаюсь привязать список в элементе ListView, но не могу правильно связать.Если бы кто-нибудь мог помочь мне с исправленной привязкой, это было бы здорово!

Вот источник, который вам, вероятно, понадобится:

//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, который я пытаюсь исправить, ниже1006 *

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

Если вам нужно больше исходного кода, пожалуйста, дайте мне знать.Большое спасибо!

1 Ответ

1 голос
/ 14 мая 2010

Хорошо, так что после еще большего дурачения я наконец узнал, как это сделать. Видимо это:

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

Недействительно, несмотря на то, что не прошло и ошибка. Когда вы указываете ItemSource для представления списка, вы не можете использовать тег ListViewItem в ListView. Поэтому я переработал свой код в следующее, что работает:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...