コレクションをリストビューにバインドするのに問題があります。私はバインディングのためにここで他の人からさまざまなアプローチを試しましたが、最初はこのチュートリアルにも従いました。私はそれを機能させましたが、それは私が望んでいた方法ではありませんでした。
とにかく、ここに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;
ListView がアイテムを印刷しているため、新しい PlayListItem を作成した直後に問題が解決したようです。