C# 标签数据绑定未更新

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) {

我正在将Windows窗体中标签的只读属性数据绑定到文本属性

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();
        };
标签文本也得到了应有的更新,那么数据绑定会出什么问题呢