0

コレクションをリストビューにバインドするのに問題があります。私はバインディングのためにここで他の人からさまざまなアプローチを試しましたが、最初はこのチュートリアルにも従いました。私はそれを機能させましたが、それは私が望んでいた方法ではありませんでした。

とにかく、ここに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 を作成した直後に問題が解決したようです。

4

2 に答える 2

1

2 つの問題。1) DataContext が設定されている場所がわかりません。これは、ウィンドウ レベルまたは個々のコントロール レベルで行うことができます。2)。PlayListItem は INotifyPropertyChanged を実装していません。InitializeComponent の後に SongList を設定する場合、INotifyPropertyChanged が必要ですが、それより前の場合は必要ありません。

于 2013-03-25T18:51:14.677 に答える
0

双方向バインディングを使用してみましたか? 一方向バインディングでは、反対側は更新されません。これを追加します: Mode="TwoWay"itemsource バインディングに。

于 2013-03-25T18:20:04.783 に答える