我试图让图像显示在 WPF ListView 中,其样式类似于 WrapPanel,如旧 ATC Avalon 团队文章中所述:如何创建自定义视图。
当我尝试使用 LINQ-to-Entities 查询的 ADO.NET 实体框架对象集合填充 ListView 时,出现以下异常:
例外
在使用 ItemsSource 之前,项目集合必须为空。
我的代码”
视觉基础
Private Sub Window1_Loaded(...) Handles MyBase.Loaded ListViewImages.ItemsSource = From g In db.Graphic _ Order By g.DateAdded Ascending _ Select g End Sub
XAML
<ListView Name="ListViewImages" SelectionMode="Single" ItemsSource="{Binding}"> <local:ImageView /> </ListView>
我在那条线上放了一个断点。 ListViewImages.ItemsSource就Nothing在 LINQ 分配之前。
ListViewImages.ItemsSource
Nothing
引发此特定异常的原因是元素的内容被应用于 ListView 的 Items 集合。local:ImageView因此,XAML 使用其Items集合中的单个初始化 ListView 。但是在使用 ItemsControl 时,您必须使用Items属性或ItemsSource属性,不能同时使用两者。因此,当处理 ItemsSource 属性时会引发异常。
local:ImageView
Items
ItemsSource
您可以通过查找类上的 ContentPropertyAttribute 来找出元素的内容将应用于哪个属性。在这种情况下,它在类层次结构中更高的 ItemsControl 上定义:
[ContentPropertyAttribute("Items")]
此处的目的是将 ListView 的 View 设置为 local:ImageView,因此解决方法是明确指示要设置的属性。
修复 XAML,异常消失:
<ListView Name="ListViewImages" SelectionMode="Single" ItemsSource="{Binding}"> <ListView.View> <local:ImageView /> </ListView.View> </ListView>
它缺少那个<ListView.View>标签。
<ListView.View>