我问过,在上一篇文章中,无法使用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会正确更改。
答案 0 :(得分:0)
我不知道这是否能解决你的问题,但是:
您触发事件的方式不是线程安全的。不仅在这里,而且总是像这样点燃你的活动:
protected void NotifyPropertyChanged(String info)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}