【发布时间】:2020-03-25 15:59:54
【问题描述】:
我正在尝试更改 ListView(WPF) 中所有项目的 BorderThickness 属性。问题是我的列表视图的项目绑定到列表的属性,其中Song 是一个类。这是我绑定它们的方法:
<ListView x:Name="listviewPlaylist" Margin="-4,-3,0,3" SelectionChanged="ListviewPlaylist_SelectionChanged" AllowDrop="True" Drop="ListviewPlaylist_Drop" DragEnter="ListviewPlaylist_DragEnter" PreviewMouseDown="ListviewPlaylist_PreviewMouseDown" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" MouseMove="ListviewPlaylist_MouseMove">
<ListView.View>
<GridView>
<GridViewColumn Header="Artist" Width="100" DisplayMemberBinding="{Binding Artist}" />
<GridViewColumn Header="Album" Width="200" DisplayMemberBinding="{Binding Album}" />
<GridViewColumn Header="Track no" Width="50" DisplayMemberBinding="{Binding TrackNo}" />
<GridViewColumn Header="Title" Width="200" DisplayMemberBinding="{Binding Title}" />
<GridViewColumn Header="Duration" Width="80" DisplayMemberBinding="{Binding Duration}" />
</GridView>
</ListView.View>
</ListView>
如果我现在尝试循环遍历 listviewPlaylist.Items,我无法将 itemObj 转换为 ListViewItem:
foreach (var itemObj in listviewPlaylist.Items)
{
var lvItem = (ListViewItem)itemObj;
lvItem.BorderThickness = new Thickness(1);
}
然后我得到这个错误:
System.InvalidCastException: '无法转换类型的对象 'MayPlayer.Song' 输入 'System.Windows.Controls.ListViewItem'。'
有没有办法从 ListView 而不是类访问项目?
我还没有在互联网上找到任何解决方案,我也尝试过:
var lvItem = itemObj as ListViewItem;
我不确定,或者我必须在这个问题中添加更多内容,请告诉我。 提前致谢。
编辑
感谢ASh,我使用了ItemContainerStyle:
Style style = new Style();
style.TargetType = typeof(ListViewItem);
style.Setters.Add(new Setter(ListViewItem.BorderThicknessProperty, new Thickness(1)));
listviewPlaylist.ItemContainerStyle = style;
【问题讨论】: