无法使用MVVM将textblock属性从另一个类绑定到UI类。(第2卷)

时间:2011-07-17 14:24:01

标签: windows-phone-7

我问过,在上一篇文章中,无法使用MVVM将textblock属性从另一个类绑定到UI类。 Can not bind textblock property from another class to UI class using MVVM

我仍然无法绑定textblock属性,但是当我无法绑定textblock属性时,我发现PropertyChanged事件变为null的新事物。

请参阅下面的代码(另见上一篇文章):

public class Authentication : ViewModelBase
{
    private string _ErrorStatus;
    public string ErrorStatus
    {
        get
        {
            return _ErrorStatus;
        }
        set
        {
            _ErrorStatus = value;
            NotifyPropertyChanged("ErrorStatus");
        }
    }

    void Authenticate()
    {
        //The bellow code doesn't work.
        ErrorStatus = "Access Denied.";
    }
}

在下面的代码中,PropertyChanged变为null。

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String info)
    {
        //PropertyChanged is null, so event is not called and ErrorStatus is not changed.
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

请告诉我如何编写正确的代码以及为什么PropertyChanged变为空。

我已经确认在UI类(MainPage.cs)中调用ErrorStatus时ErrorStatus会正确更改。

1 个答案:

答案 0 :(得分:0)

我不知道这是否能解决你的问题,但是:

您触发事件的方式不是线程安全的。不仅在这里,而且总是像这样点燃你的活动:

protected void NotifyPropertyChanged(String info)
{
    var handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(info));
    }
}