C# 将2个ObservableCollections绑定到Listview
我是WPF的新手,在绑定方面有困难,一直在寻找不同的解决方案,但并没有任何帮助。 有两个可观察的集合,我想绑定到listview的不同列中。 XAML代码:C# 将2个ObservableCollections绑定到Listview,c#,wpf,listview,data-binding,observablecollection,C#,Wpf,Listview,Data Binding,Observablecollection,我是WPF的新手,在绑定方面有困难,一直在寻找不同的解决方案,但并没有任何帮助。 有两个可观察的集合,我想绑定到listview的不同列中。 XAML代码: <GroupBox Header="Search results" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="727" Width="739" FontFamily="Malgun Gothic" FontSize="24"
<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>
来自课堂:
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; }
}
我错过了什么
NIT的更新:
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“库”(HashCode=36404074)上找不到“相册”属性。BindingExpression:Path=Albums;DataItem='Library'(HashCode=36404074);目标元素是“ListView”(Name='ListView1');目标属性为“ItemsSource”(类型为“IEnumerable”)
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“库”(HashCode=40706798)上找不到“跟踪”属性。BindingExpression:Path=Track;DataItem='Library'(HashCode=40706798);目标元素为“TextBlock”(名称=“”);目标属性为“Text”(类型为“String”)
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“库”(HashCode=40706798)上找不到“艺术家”属性。BindingExpression:Path=Artist;DataItem='Library'(HashCode=40706798);目标元素为“TextBlock”(名称=“”);目标属性为“Text”(类型为“String”)创建一个包含两个属性的模型类,而不是有两个分离的集合
public class Album
{
public string Track{get;set;}
public string Artist{get;set;}
}
并创建该类的ObservableCollection
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);
}
}
publicobservableCollection相册{get;set;}
foreach(目录中的目录信息)
{
foreach(diNext.GetFileSystemInfos(“*”+tb+“*”+“.mp3”,SearchOption.AllDirectories)中的FileInfo测试)
{
u、 读取(test.FullName);
相册=新相册;
唱片公司Track=u.Title;
专辑艺术家=美国艺术家;
相册。添加(相册);
}
}
现在将此集合绑定到ListView
<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>
代码生成了,但除了它真正清理了代码之外,没有任何更改:)谢谢。但它仍然没有显示任何东西。已调试并检查新集合不是空的Bums需要是公共属性(get)Dosent知道你的意思吗?它是公共的?相册应该是图书馆的财产。。不可变..请查看更新的答案抱歉,因为你是个不折不扣的人。对象引用未设置为对象的实例在Albums中持续发生。添加(album)?它不是没有get的属性
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>