繁体   English   中英

将ObservableCollection绑定到ListView

[英]Bind ObservableCollection to ListView

我在将收藏夹绑定到列表视图时遇到了一些麻烦。 在这里,我尝试了很多其他方法来进行绑定,并且首先也遵循了本教程 我成功了,但这不是我想要的方式。

无论如何,这是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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM