微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从WPF中的Collection <Derived>绑定到Collection <Base>

如何解决从WPF中的Collection <Derived>绑定到Collection <Base>

我有一个ListView,它被多次使用,每种情况都需要显示同一抽象类的不同派生类的项。我想搜索列表并从列表中删除项目。不用说,如果我可以绑定到基类并将其封装在UserControl中,那将很方便。

具体来说,抽象类

Public MustInherit Class SearchableItem
    Public ReadOnly Property Text As String
End Class

和派生的人

Public Class Series
    Inherits SearchableItem

    Public Property Title As String
    Public Property Desc As String

    Public Overloads ReadOnly Property Text As String
        Get
            Return Title
        End Get
    End Property

End Class

显示

Public Class SomeAvatar

    Public Property SeriesList As New ObservableCollection(Of Series)

End Class

最后,UserControl具有ItemList显示的依赖项属性ListView

Public Property ItemList As ObservableCollection(Of SearchableItem)
    Get
        Return GetValue(ItemListProperty)
    End Get

    Set(ByVal value As ObservableCollection(Of SearchableItem))
        SetValue(ItemListProperty,value)
    End Set
End Property

Public Shared ReadOnly ItemListProperty As DependencyProperty =
                       DependencyProperty.Register("ItemList",GetType(ObservableCollection(Of SearchableItem)),GetType(ucListView),New PropertyMetadata(nothing))

问题是ItemList为空。我已经检查了UserControl的所有父项的Loaded事件,它们都具有完整的集合。然后,我将集合作为DataContext的{​​{1}}的一部分通过,并得到了一个错误内容UserControl(释义)。

不是狗的集合,也不是动物的集合吗?我必须缺少一些基本的东西,或者这与WPF有关?

解决方法

This answer(一个非常类似的问题)解释了为什么不允许这样做。

简短的答案是,您不能将Series的可写集合视为SearchableItem的可写集合,因为应该允许SearchableItem的集合包含任何派生的对象来自SearchableItem,而Series的集合应该只能包含Series个对象。

简短的答案是,您可以像读ObservableCollection<Series>一样读ObservableCollection<SearchableItem>,但是不能这样写。

如果ItemList只需要从集合中读取,则可以使用IEnumerable<SearchableItem>您将分配值ObservableCollection<Series>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?