Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 当为集合类型依赖项属性指定值时,将创建单例_Wpf_Singleton_Dependency Properties - Fatal编程技术网

Wpf 当为集合类型依赖项属性指定值时,将创建单例

Wpf 当为集合类型依赖项属性指定值时,将创建单例,wpf,singleton,dependency-properties,Wpf,Singleton,Dependency Properties,我正在尝试在WPF中创建一个类型为List(of)的依赖项对象,其中包含控件的所有子级。尽管采取了预防措施,但当我为属性赋值时,似乎创建了一个单例。当我指定一个值时,该值将与类的实例数相乘 这是我的密码: Public Class Period Inherits ListBox '-------- PROPERTIES --------' Private Property Subjects() As List(Of Subject) Get Return Me.GetV

我正在尝试在WPF中创建一个类型为List(of)的依赖项对象,其中包含控件的所有子级。尽管采取了预防措施,但当我为属性赋值时,似乎创建了一个单例。当我指定一个值时,该值将与类的实例数相乘

这是我的密码:

Public Class Period
Inherits ListBox

'-------- PROPERTIES --------'
Private Property Subjects() As List(Of Subject)
    Get
        Return Me.GetValue(SubjectsProperty)
    End Get
    Set(value As List(Of Subject))
        Me.SetValue(SubjectsProperty, value)
    End Set
End Property

Private Shared ReadOnly SubjectsProperty As DependencyProperty = DependencyProperty.Register("Subjects", GetType(List(Of Subject)), GetType(Period), New FrameworkPropertyMetadata(New List(Of Subject))) 

Public Sub New()
            MyBase.New()
            Me.Subjects = New List(Of Subject) 'Reason: stop it from adding values to defult value collection. See:http://msdn.microsoft.com/en-us/library/aa970563.aspx
End Sub
此子例程用于在添加子对象时刷新属性:

 Private Sub RefreshSubjectsProperty()
    Dim ListOfSubjects As New List(Of Subject)
    Dim Subject As New Subject
    Dim Entry As New PeriodEntry

    For Each Entry In LogicalTreeHelper.GetChildren(Me)
        Subject.SubjectName = Entry.SubjectName
        Subject.Teacher = Entry.Teacher
        Subject.Students = Entry.Students

        ListOfSubjects.Add(Subject)
    Next

    Me.Subjects = ListOfSubjects
End Sub

有什么问题吗?我不知道。如果您像以前一样使用默认值定义collection类型的依赖项属性,那么您将始终拥有一个singleton实例。这是WPF中的设计。在属性声明中将默认值设置为null,并在构造函数中初始化属性,使其仅使用每个依赖项对象的属性。@ninjahedgehog谢谢,我没有意识到,我只是在MSDN网站上遵循了这个示例。谢谢