Wpf 获取/设置Visual Basic ObservableCollection属性的其他方法

Wpf 获取/设置Visual Basic ObservableCollection属性的其他方法,wpf,vb.net,visual-studio,observablecollection,Wpf,Vb.net,Visual Studio,Observablecollection,我想知道是否有其他方法可以设置/获取observableCollection属性的值。请参见下面的示例 假设我有 Public Class Record public Property Field1 as string public Property Field2 as string End Class 我的问题是如何设置或获取以下示例中的记录属性 Public Sub TestRecord() sRecord = new Record sRecord("

我想知道是否有其他方法可以设置/获取observableCollection属性的值。请参见下面的示例

假设我有

Public Class Record
     public Property Field1 as string
     public Property Field2 as string
End Class

我的问题是如何设置或获取以下示例中的记录属性

Public Sub TestRecord()
    sRecord = new Record
    sRecord("Field1") = "test"
    sRecord("Field2") = "test2"
End Sub

或者还有其他方法吗?

这里是为您的案例使用
系统反射的示例

测试班

Public Class Record
   Public Property Field1 As String
   Public Property Field2 As String
End Class
范例

Dim data As New DataTable()
data.Columns.Add("Field1", GetType(String))
data.Columns.Add("Field2", GetType(String))

Dim dr As DataRow
dr = data.NewRow()
dr.SetField("Field1", "0")
dr.SetField("Field2", "Zero")
data.Rows.Add(dr)

dr = data.NewRow()
dr.SetField("Field1", "1")
dr.SetField("Field2", "One")
data.Rows.Add(dr)

For Each row As DataRow In data.Rows
    Dim temp As New Record()
    For Each prop As PropertyInfo In GetType(Record).GetProperties()
        If data.Columns.Contains(prop.Name) = True Then
           prop.SetValue(temp, row(prop.Name))
        End If
    Next
    Console.WriteLine($"{temp.Field1}, {temp.Field2}")
Next
将在控制台中打印结果:

0, Zero
1, One

另一方面,考虑使用或其他ORM(对象关系映射器)框架。< /P> < P>这里使用<代码>系统。 测试班

Public Class Record
   Public Property Field1 As String
   Public Property Field2 As String
End Class
范例

Dim data As New DataTable()
data.Columns.Add("Field1", GetType(String))
data.Columns.Add("Field2", GetType(String))

Dim dr As DataRow
dr = data.NewRow()
dr.SetField("Field1", "0")
dr.SetField("Field2", "Zero")
data.Rows.Add(dr)

dr = data.NewRow()
dr.SetField("Field1", "1")
dr.SetField("Field2", "One")
data.Rows.Add(dr)

For Each row As DataRow In data.Rows
    Dim temp As New Record()
    For Each prop As PropertyInfo In GetType(Record).GetProperties()
        If data.Columns.Contains(prop.Name) = True Then
           prop.SetValue(temp, row(prop.Name))
        End If
    Next
    Console.WriteLine($"{temp.Field1}, {temp.Field2}")
Next
将在控制台中打印结果:

0, Zero
1, One

另一方面,考虑使用或其他ORM(对象关系映射器)框架。

可以使用记录类中的功能:

Public Class Record
        Private fields As New Dictionary(Of String, String)
        Public Property Field1 As String
            Get
                Return fields("Field1")
            End Get
            Set(value As String)
                fields("Field1") = value
            End Set
        End Property


        Public Property Field2 As String
        'Same code as Field1 but with "Field2" of course

        Default Public Property Item(field As String)
            Get
                Return fields(field)
            End Get
            Set(value)
                fields(field) = value
            End Set
        End Property
End Class
然后可以进行如下访问:

   Dim record As New Record
   record("Field1") = "Hello Default Property!"
   record.Field2 = "Hello Field2 !"
   Console.WriteLine(record("Field1"))
您可以使用Record类中的功能:

Public Class Record
        Private fields As New Dictionary(Of String, String)
        Public Property Field1 As String
            Get
                Return fields("Field1")
            End Get
            Set(value As String)
                fields("Field1") = value
            End Set
        End Property


        Public Property Field2 As String
        'Same code as Field1 but with "Field2" of course

        Default Public Property Item(field As String)
            Get
                Return fields(field)
            End Get
            Set(value)
                fields(field) = value
            End Set
        End Property
End Class
然后可以进行如下访问:

   Dim record As New Record
   record("Field1") = "Hello Default Property!"
   record.Field2 = "Hello Field2 !"
   Console.WriteLine(record("Field1"))

请告诉我们这种方法的目的。您可以使用
System.Reflection
按名称访问属性。您可以使用字典存储field1、field2等的值Hi@5uperdan,您的意思是将记录类更改为此吗?公共类记录公共属性字段1作为新字典(字符串的,字符串的)公共属性字段2作为新字典(字符串的,字符串的)结束Class@Fabio,您好,先生,目的是通过从数据库字段获取名称来自动为属性分配值。执行我的问题返回此错误“无法编制索引,因为它没有默认属性”使用-这正是您试图实现的请告诉我们该方法的目的。您可以使用
System.Reflection
按名称访问属性。您可以使用字典存储field1、field2等的值Hi@5uperdan,您的意思是将记录类更改为此吗?公共类记录公共属性字段1作为新字典(字符串的,字符串的)公共属性字段2作为新字典(字符串的,字符串的)结束Class@Fabio,您好,先生,目的是通过从数据库字段获取名称来自动为属性分配值。执行我的问题返回此错误“无法编制索引,因为它没有默认属性”使用-这正是您试图实现的目标非常感谢我现在正在查看EF6非常感谢我现在正在查看EF6非常感谢@Alex B非常感谢@Alex B非常感谢