C# 标签数据绑定未更新
我正在将Windows窗体中标签的只读属性数据绑定到文本属性C# 标签数据绑定未更新,c#,winforms,data-binding,C#,Winforms,Data Binding,我正在将Windows窗体中标签的只读属性数据绑定到文本属性 lblSourceLoggingState.DataBindings.Add("Text", machine, "Status"); 我的问题是文本只在表单启动时更新。 我正在基类中实现INotifyPropertyChanged,如下所示: protected void SetValue<T>(Expression<Func<T>> property, T value) {
lblSourceLoggingState.DataBindings.Add("Text", machine, "Status");
我的问题是文本只在表单启动时更新。
我正在基类中实现INotifyPropertyChanged,如下所示:
protected void SetValue<T>(Expression<Func<T>> property, T value)
{
LambdaExpression lambdaExpression = property;
if (lambdaExpression == null)
{
throw new ArgumentException("Lambda expression return value can't be null", "property");
}
string propertyName = PropertyName.GetMemberName(lambdaExpression);
T storedValue = getValue<T>(propertyName);
if (Equals(storedValue, value))
return;
_propertyValueStorage[propertyName] = value;
OnPropertyChanged(propertyName);
}
public SynchronizationContext SyncContext;
protected ViewModelBase()
{
SyncContext = SynchronizationContext.Current;
_propertyValueStorage = new Dictionary<string, object>();
}
protected void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
if (SyncContext != null)
SyncContext.Send(obj => handler(this, new PropertyChangedEventArgs(propertyName));
else
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
machine.PropertyChanged += delegate(object sender, PropertyChangedEventArgs args)
{
if (args.PropertyName == "Status")
lblSourceLoggingState.Text = machine.Status.ToString();
};
在调试和单步执行SetValue或OnPropertyChanged方法时,标签文本会得到更新,但如果在没有断点的情况下运行应用程序,则不会更新。
另外,如果我像这样注册到PropertyChangedEvent:
protected void SetValue<T>(Expression<Func<T>> property, T value)
{
LambdaExpression lambdaExpression = property;
if (lambdaExpression == null)
{
throw new ArgumentException("Lambda expression return value can't be null", "property");
}
string propertyName = PropertyName.GetMemberName(lambdaExpression);
T storedValue = getValue<T>(propertyName);
if (Equals(storedValue, value))
return;
_propertyValueStorage[propertyName] = value;
OnPropertyChanged(propertyName);
}
public SynchronizationContext SyncContext;
protected ViewModelBase()
{
SyncContext = SynchronizationContext.Current;
_propertyValueStorage = new Dictionary<string, object>();
}
protected void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
if (SyncContext != null)
SyncContext.Send(obj => handler(this, new PropertyChangedEventArgs(propertyName));
else
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
machine.PropertyChanged += delegate(object sender, PropertyChangedEventArgs args)
{
if (args.PropertyName == "Status")
lblSourceLoggingState.Text = machine.Status.ToString();
};
标签文本也得到了应有的更新,那么数据绑定会出什么问题呢