将 2 个可观察集合绑定到列表视图

本文关键字:绑定 列表 视图 集合 观察 | 更新日期: 2023-09-27 18:35:34

我是WPF的新手,并且在绑定方面遇到问题,一直在寻找差异解决方案,但没有任何帮助。有 2 个可观察集合,我想绑定到列表视图的不同列中。XAML 代码:

<GroupBox Header="Search results" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="727" Width="739" FontFamily="Malgun Gothic" FontSize="24">
        <ListView x:Name="ListView1"  HorizontalAlignment="Left" Width="729" FontFamily="Malgun Gothic" FontSize="24" Background="{x:Null}" Margin="0,0,-2,0" ItemsSource="{Binding ElementName=Search, Path=Library}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Song name" DisplayMemberBinding="{Binding Track}" Width="550"/>
                    <GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}" Width="170"/>
                </GridView>
            </ListView.View>
            <ListView.DataContext>
                <Classes:Library/>
            </ListView.DataContext>
            <Classes:Library Text=""/>
        </ListView>
    </GroupBox>

从 xaml.cs

    Library CallSearch = new Library();
    Playlist Songs = new Playlist();
    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
            CallSearch.Text = textSearch.Text;
            CallSearch.Search();
    }

从课堂:

    private ObservableCollection<string> track = new ObservableCollection<string>();
    private ObservableCollection<string> artist = new ObservableCollection<string>();
    public ObservableCollection<string> Track
    {
        get { return track; }
        set { track = value; }
    }
    public ObservableCollection<string> Artist
    {
        get { return artist; }
        set { artist = value; }
    }

在公共空隙内:

            foreach (DirectoryInfo diNext in dirs)
            {
                foreach (FileInfo test in diNext.GetFileSystemInfos("*"+tb+"*"+".mp3", SearchOption.AllDirectories))
                {
                    u.Read(test.FullName);
                    Track.Add(u.Title);
                    Artist.Add(u.Artist);
                }
            }

我错过了什么?

针对 NIT 的更新:System.Windows.Data 错误:40:绑定表达式路径错误:在"对象"库"(哈希代码=36404074)"上找不到"相册"属性。绑定表达式:路径=相册;DataItem='Library' (hashCode=36404074);目标元素是"列表视图"(名称="列表视图1");目标属性是"ItemsSource"(类型"IEnumerable")System.Windows.Data 错误: 40 : 绑定表达式路径错误: 在"对象"库"(哈希代码 = 40706798)"上找不到"跟踪"属性。绑定表达式:路径=跟踪;DataItem='Library' (HashCode=40706798);目标元素是"文本块"(名称=");目标属性为"文本"(类型"字符串")System.Windows.Data 错误: 40 : 绑定表达式路径错误: 在"对象"库"(哈希代码=40706798)"上找不到"艺术家"属性。绑定表达式:路径=艺术家;DataItem='Library' (HashCode=40706798);目标元素是"文本块"(名称=");目标属性为"文本"(类型"字符串")

将 2 个可观察集合绑定到列表视图

不要有两个脱节的集合,而创建一个包含两个属性的模型类

public class Album
{
 public string Track{get;set;}
 public string Artist{get;set;}
}

并创建此类的可观察集合

public ObservableCollection<Album> Albums{get;set;}
foreach (DirectoryInfo diNext in dirs)
{
      foreach (FileInfo test in diNext.GetFileSystemInfos("*"+tb+"*"+".mp3", SearchOption.AllDirectories))
      {
                    u.Read(test.FullName);
                    Album album = new Album;
                    album.Track = u.Title;
                    album.Artist = u.Artist;
                    Albums.Add(album);
       }
 }

现在将此集合绑定到列表视图

  <ListView x:Name="ListView1"  HorizontalAlignment="Left" Width="729" FontFamily="Malgun Gothic" FontSize="24" Background="{x:Null}" Margin="0,0,-2,0" ItemsSource="{Binding  Path=Albums}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Song name" DisplayMemberBinding="{Binding Track}" Width="550"/>
                <GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}" Width="170"/>
            </GridView>
        </ListView.View>
        <ListView.DataContext>
            <Classes:Library/>
        </ListView.DataContext>
        <Classes:Library Text=""/>
    </ListView>