数据绑定TextBox不使用Source更新

时间:2017-10-10 12:29:40

标签: vb.net data-binding

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

txtWages.DataBindings.Add(New Binding("EditValue", mymap, "Wages", False, DataSourceUpdateMode.OnPropertyChanged))

正在对类进行序列化/反序列化。当我加载XML文件时,显示工资的TextBox不会更新以反映工资值。

我将(Devexpress)TextBox DataBindings设置为:

    <input type="text" class="product-input js-product-tags" placeholder="Computer, devices, smartphone" />


    <ul class="js-tags">
     <li class="tag-options">
      <span>CPU</span><div class="remove-tag js-remove-tag">X</div>
     </li>
    </ul>

当我加载文件时,我可以看到Debug.Print中的旧值和新值:

  

事件提升:0 13

但是, txtWages 保持为0

我已经阅读了这些答案HereHere并试图寻找想法,但我没有想法。

编辑:似乎如果我使用反序列化的XML填充类,然后设置它可以使用Bindings,但是在首先设置绑定时则不行。我原以为它会起作用。

2 个答案:

答案 0 :(得分:2)

你的代码错误

PropertyChangedEventArgs需要String(属性名称)

所以“工资”

 RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Wages"))

答案 1 :(得分:1)

  1. 您应该向PropertyChangedEventArgs

    提供该属性的名称
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nameof(Wages))
    
  2. 你没有表现出来,但显然当你加载&#34;对您创建Map的新实例的文件和反序列化类,并将其设置为mymap。控制的绑定仍然会引用原始实例并听取它的事件。

  3. 创建&#34;包装&#34;具有类型Map的属性的viewmodel,并在加载文件时引发属性更改事件。

    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)