Bind ObservableCollection to ListView
本文关键字:ListView to ObservableCollection Bind | 更新日期: 2023-09-27 18:05:39
我有一些麻烦绑定我的集合到我的列表视图。我在这里尝试了很多不同的绑定方法,并且一开始也遵循了这个教程。我让它工作,但它不是我想要的方式。
无论如何,这里是XML:
<ListView Grid.Row="0" ItemsSource="{Binding SongList}" SelectionMode="Extended" x:Name="ListViewMain" VerticalAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Visible" Margin="0,1,0,0" Height="264" >
<ListView.View>
<GridView>
<GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" Width="500"/>
<GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}" Width="100"/>
<GridViewColumn Header="Album" DisplayMemberBinding="{Binding Album}" Width="100"/>
<GridViewColumn Header="Length" DisplayMemberBinding="{Binding Length}" Width="100"/>
<GridViewColumn Header="Location" DisplayMemberBinding="{Binding Songfile}" Width="100"/>
</GridView>
</ListView.View>
</ListView>
在我的代码中,要向集合中添加项,我这样做:
public MainWindow()
{
InitializeComponent();
...
PlayListItem addsong = new PlayListItem(title, artist, album, length, filename);
}
带有ObservableCollection的PlayListItem类:
public class PlayListItem
{
public ObservableCollection<Song> _SongList = new ObservableCollection<Song>();
public ObservableCollection<Song> SongList { get { return _SongList; } }
public PlayListItem(string _Title, string _Artist, string _Album, string _Length, string _Filename)
{
_SongList.Add(new Song
{
Title = _Title,
Artist = _Artist,
Album = _Album,
Length = _Length,
SongFile = _Filename,
});
}
public class Song
{
public string Artist { get; set; }
public string Album { get; set; }
public String Title { get; set; }
public string Length { get; set; }
public String SongFile { get; set; }
}
}
我认为每次调用构造函数时都正确地添加了项目,但它没有在ListView上更新。在输出窗口中,我也没有关于绑定的一些错误。
任何想法和帮助都将是感激的。
编辑:通过添加:
ListViewMain.ItemsSource = addsong.SongList;
在创建一个新的PlayListItem之后似乎解决了这个问题,因为ListView现在正在打印这个项目。
有两个问题。1)我不知道DataContext在哪里设置。你可以在窗口级别或单个控件级别这样做。2). PlayListItem不实现INotifyPropertyChanged。如果在InitializeComponent之后设置SongList,则需要INotifyPropertyChanged,但在此之前则不需要。
您是否尝试使用双向绑定?单向绑定不会更新另一端。在itemsource绑定中添加:Mode="TwoWay"