Vb.net 数据绑定文本框未使用源更新

Vb.net 数据绑定文本框未使用源更新,vb.net,data-binding,Vb.net,Data Binding,我有一个实现InotifyProperty的自定义类,更改如下(删除了无关和重复的属性): 正在正确序列化/反序列化该类。加载XML文件时,显示工资的文本框不会更新以反映工资值 我将(Devexpress)文本框数据绑定设置为: txtWages.DataBindings.Add(New Binding("EditValue", mymap, "Wages", False, DataSourceUpdateMode.OnPropertyChanged)) 加载文件时,我可以从Debug.Pri

我有一个实现InotifyProperty的自定义类,更改如下(删除了无关和重复的属性):

正在正确序列化/反序列化该类。加载XML文件时,显示工资的文本框不会更新以反映工资值

我将(Devexpress)文本框数据绑定设置为:

txtWages.DataBindings.Add(New Binding("EditValue", mymap, "Wages", False, DataSourceUpdateMode.OnPropertyChanged))
加载文件时,我可以从Debug.Print中看到新旧值:

引发的事件:0 13

但是,TXT工资保持为0

我读了这些答案,并试图寻找想法,但我的想法

EDIT:似乎如果我用反序列化的XML填充类,然后设置绑定,它就会工作,但在首先设置绑定时不会工作。我原以为这两种方法都能奏效。

你的代码有错误

PropertyChangedEventArgs需要字符串(属性名称)

所以“工资”

你有代码错误吗

PropertyChangedEventArgs需要字符串(属性名称)

所以“工资”

  • 您应该向
    PropertyChangedEventArgs

    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nameof(Wages))
    
  • 您并没有显示,但很明显,当您“加载”文件并反序列化类时,您创建了
    Map
    的新实例,并将其设置为
    mymap
    。其中控件的绑定仍将引用原始实例并侦听其事件

  • 创建属性类型为
    Map
    的“包装器”视图模型,并在加载文件时引发属性更改事件

    Public Class ViewModel
        Private _Map As Map
        Property Map As Map
            Get
                Return _Map
            End Get
            Set(value As Map)
                _Map = value
                RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nameof(Wages))
            End Set
        End Property  
    End Class
    
    然后在形式上做绑定

    Dim viewmodel = new ViewModel()
    viewmodel.Map = DeserializeMap() ' Your deserialize logic
    txtWages.DataBindings.Add("EditValue", 
                              viewmodel, 
                              "Map.Wages", 
                              False, 
                              DataSourceUpdateMode.OnPropertyChanged)
    
  • 您应该向
    PropertyChangedEventArgs

    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nameof(Wages))
    
  • 您并没有显示,但很明显,当您“加载”文件并反序列化类时,您创建了
    Map
    的新实例,并将其设置为
    mymap
    。其中控件的绑定仍将引用原始实例并侦听其事件

  • 创建属性类型为
    Map
    的“包装器”视图模型,并在加载文件时引发属性更改事件

    Public Class ViewModel
        Private _Map As Map
        Property Map As Map
            Get
                Return _Map
            End Get
            Set(value As Map)
                _Map = value
                RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nameof(Wages))
            End Set
        End Property  
    End Class
    
    然后在形式上做绑定

    Dim viewmodel = new ViewModel()
    viewmodel.Map = DeserializeMap() ' Your deserialize logic
    txtWages.DataBindings.Add("EditValue", 
                              viewmodel, 
                              "Map.Wages", 
                              False, 
                              DataSourceUpdateMode.OnPropertyChanged)
    

    我自己也注意到了。即使传递属性名而不是属性值,它也不会更新,除非我在类填充后设置绑定。因此,使用映射对象的属性集,当你填充新对象时,你可以轻松地重新绑定表单控件。我也注意到了这一点。即使传递属性名而不是属性值,它也不会更新,除非我在填充类后设置绑定。因此,使用映射对象的属性集,并且在填充新对象时,可以轻松地重新绑定表单控件
    MyMap
    ,然后再声明
    new
    sub。要反序列化的代码是:
    MyMap=BM.Utilities.FileHelper.Deserialize(Of Map)(“Routes.xml”)
    这肯定是同一个实例吗?反序列化将创建
    Map
    MyMap
    类型的新实例,然后在
    new
    sub之前声明。要反序列化的代码是:
    MyMap=BM.Utilities.FileHelper.Deserialize(Of Map)(“Routes.xml”)
    肯定是同一个实例吗?反序列化将创建类型为
    Map
    的新实例。