将 2 个具有相同引用对象的可观察集合丢失依赖项属性 - wpf 的值



i 有 2 个 observableCollection 实例

Public Property Reports As New ObservableCollection(Of Report)
Public Property AvailableReports As New ObservableCollection(Of Report)

第一个列表在初始化时填充,第二个列表填充第一个列表中符合特定条件的对象。

For Each rep As Report In Reports
    If rep.Width = _customWidth
        AvailableReports.Add(rep)
    End If
Next

这样做时,报表中的依赖属性"IsSelected"将丢失其值;因此,如果"报告"列表中的一个对象"x"具有"IsSelected = True",则将其添加到"可用报告"列表后,"x.IsSelected"将返回 False。

下面是报表类的代码

Public Class Report
Inherits DependencyObject
Implements IComparable(Of Report)
Public Property Layout As Byte()
Public Property reportId As Integer
Public Property Name As String
Public Property Width As Double
Public Shared ReadOnly IsSelectedProperty As DependencyProperty = DependencyProperty.Register("IsSelected", GetType(Boolean), GetType(Report))
Public Property IsSelected As Boolean
    Get
        Return GetValue(IsSelectedProperty)
    End Get
    Set(value As Boolean)
        SetValue(IsSelectedProperty, value)
    End Set
End Property
Public Function CompareTo(other As Report) As Integer Implements IComparable(Of Report).CompareTo
    Return Me.Width.CompareTo(other.Width)
End Function

结束类

我无法重现您的问题。如果我创建一个对象并将它们放入不同的 ObservableCollections,那么这个对象具有相同的值,也是通过依赖属性,它不能是其他的,因为集合共享同一个对象,这是引用类型。如果我将这些集合绑定到不同的 UI 控件并绑定 IsSelected 属性,则更改一个控件中的属性会导致更改另一个控件中的选择。
修改您的代码,无论您发布的代码是否与您的真实代码匹配。它应该有效。

相关内容

  • 没有找到相关文章

最新更新