WPF ListView GridViewColumn绑定

时间:2016-05-25 13:20:13

标签: c# wpf listview gridview binding

我正在尝试将列绑定到列中的ListView。

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; }
}

当调用refresh时,我希望MediaItem的标题显示在它自己的列中(这样我以后可以添加其他属性)。

目前,GridView只显示ToString()结果:

enter image description here

其他问题暗示解决方案与DataContext有关,但我找不到任何可行的方法。

谢谢。

2 个答案:

答案 0 :(得分:0)

将它放在构造函数中: this.DataContext = this;

this.DataContext = this;

在XAML中:

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

使用ObservableCollection而不是List。

然后,在刷新方法中,您不需要第一行和最后一行。

答案 1 :(得分:0)

好的 - 我最终解决了它。

我离开项目一段时间,专注于学习MVVM设计模式,摆脱旧的WinForms习惯。

当MediaItem类继承INotifyPropertyChanged(并在属性的setter中引发PropertyChanged)时,这将按预期工作。

我不完全确定为什么这是必要的,但它解决了这个问题。

相关问题