2013-03-25 128 views
0

我有一些麻烦将我的集合绑定到我的列表视图。我尝试了很多不同的方法,来自其他人在这里进行绑定,并且最初也遵循this tutorial。我做了它的工作,但它不是我想要的。将ObservableCollection绑定到ListView

Anymway,这里是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); 
} 

的PlayListItem类用的ObservableCollection:

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控件正在打印项目之后。

+0

的可能重复的[WPF的ObservableCollection VS的BindingList (http://stackoverflow.com/questions/6254441/wpf-observablecollectiont-vs-bindinglistt) – MethodMan 2013-03-25 18:22:42

+0

后'的InitializeComponent右()','放的DataContext =此; '。 – Steve 2013-03-25 21:04:53

+0

您必须从歌曲列表类中获取歌曲列表集合。只要把它放在你的主窗口。您 – Entrodus 2015-10-08 15:09:03

回答

0

你试过使用双向绑定吗?单向绑定不会更新另一侧。在itemsource绑定中添加此项:Mode="TwoWay"

1

两个问题。 1)我看不到DataContext的设置。您可以在窗口级别或单个控制级别执行此操作。 2)。 PlayListItem不会实现INotifyPropertyChanged。如果您在InitializeComponent之后设置SongList,则需要INotifyPropertyChanged,但如果在之前则不需要。

相关问题