2016-05-25 5 views
0

アイテムをListViewに列でバインドしようとしています。WPF ListView GridViewColumnバインド

XAML:背後

<Grid> 
<ListView x:Name="songList"> 
    <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Title" Width="200" DisplayMemberBinding="{Binding Title}"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

コード:

public List<MediaItem> mIList = new List<MediaItem>(); 

void refresh() 
{ 
    songList.Items.Clear(); 
    foreach (KeyValuePair<int, Library.MediaItem> i in ActiveLibrary.Items) 
    { 
     Library.MediaItem item = i.Value; 
     mIList.Add(new MediaItem() { Title = item.Title }); 
    } 
    songList.ItemsSource = mIList; 
} 


public class MediaItem 
{ 
    public string Title { get; set; } 
} 

リフレッシュが呼び出されると、私はMediaItemのタイトルが独自の列に表示させたい(私はそのように後で他のプロパティを追加できます)。現時点で

は、GridViewのはただのToString()の結果を示しています

enter image description here

その他の質問は解決策がDataContextのとは何かであることを示唆しているが、私は何も見つかっていないこと働く

ありがとうございます。

+0

これをチェックするhttp://stackoverflow.com/questions/26353919/wpf-listview-binding-itemssource-in-xaml –

+0

私はObservableCollectionを取得してアクセサを設定し、代わりに初期化子でデータコンテキストを設定しました。それでも列は表示されません。 –

答えて

0

Ok - 私は結局それを解決しました。

私はMVVMデザインパターンの学習に焦点を当て、以前のWinFormsの習慣から離れてプロジェクトをしばらく残しました。

MediaItemクラスがINotifyPropertyChangedを継承し、プロパティの設定者でPropertyChangedを呼び出すと、期待どおりに機能します。

これがなぜ必要なのか完全にはわかりませんが、問題が修正されています。

0

これをコンストラクタに入れます。 this.DataContext = this;代わりに、リストの

<ListView x:Name="songList" ItemsSource="mIList"> 

利用のObservableCollection:XAMLで

this.DataContext = this; 

次に、リフレッシュ方法では、最初と最後の行は必要ありません。

+0

私はItemsSource = "{バインディングmIList}"を使用しなければなりませんでした。これは前と同じです –

関連する問題