【问题标题】:WPF - Binding to a list within a Listview ItemWPF - 绑定到 Listview 项中的列表
【发布时间】:2010-05-10 18:57:07
【问题描述】:

所以我试图绑定到 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 如下

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

如果您需要更多源代码,请告诉我。非常感谢!

【问题讨论】:

  • 所以我的代码发布在发布过程中被破坏了...不要问我预览中看起来如何。我会尝试重新发布 XAML

标签: c# wpf data-binding listview


【解决方案1】:

好吧,经过一番鬼混之后,我终于找到了方法。显然是这样的:

 <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 时,您不能在 ListView 中使用 ListViewItem 标记。所以我将我的代码改写成以下代码:

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

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 2022-06-17
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多