我有一个WinForms项目,它使用数据绑定来跟踪实时价格。价格如此约束:
var btcPriceInUsdBinding = new Binding("Text", Client, "BtcPriceInUsd", true, DataSourceUpdateMode.OnPropertyChanged);
btcPriceInUsdBinding.Format += (s, e) => { e.Value = string.Format("BTC/USD: ${0:#####0.00}", e.Value); };
btcUsdValueLabel.DataBindings.Add(btcPriceInUsdBinding);
存储数据的实际对象继承自ObservableObject
- 即实现INotifyPropertyChanged的抽象基类。
public abstract class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void Notify([CallerMemberName]string property = null)
{
if (property != null)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
}
然后当一个值改变时,它会像这样被触发
public decimal BtcPriceInUsd
{
get { return _btcPriceInUSD; }
set {
_btcPriceInUSD = value;
Notify();
}
}
调试,我可以看到正确调用了PropertyChanged,并且在Binding.Format
事件内部显示e.Value
是正确的值。但是,尽管如此,标签仍未更新。为什么会这样?