我有一个实现 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
我已经阅读了这些答案Here和Here并试图寻找想法,但我没有想法。
编辑:似乎如果我使用反序列化的XML填充类,然后设置它可以使用Bindings,但是在首先设置绑定时则不行。我原以为它会起作用。
答案 0 :(得分:2)
你的代码错误
PropertyChangedEventArgs需要String(属性名称)
所以“工资”
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Wages"))
答案 1 :(得分:1)
您应该向PropertyChangedEventArgs
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nameof(Wages))
你没有表现出来,但显然当你加载&#34;对您创建Map
的新实例的文件和反序列化类,并将其设置为mymap
。控制的绑定仍然会引用原始实例并听取它的事件。
创建&#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)