此ViewModel可能存在任何问题吗



下面的ViewModel是否存在任何可能的错误?换句话说,代码中是否有可能产生任何问题的部分?请告知。非常感谢。

public class MyViewModel : INotifyPropertyChanged
{
private string _text;
public string Text
{
get { return _text; }
set
{
if (Equals(_text, value))
return;
_text = value;
OnPropertyChanged(nameof(Text));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if(PropertyChanged!=null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

如果从不同线程调用OnPropertyChanged方法,则可能会出现一些线程问题。如果在另一个线程上并行发生任何PropertyChanged事件非订阅,则可能会引发NullReferenceException。当您最初检查PropertyChanged是否为非null时,它可能显示为true,但当您尝试调用处理程序时,下一行可能为null。因此,正确和推荐的方法如下所示。此外,您可以通过将[CallerMemberNameAttribute]添加到propertyName参数来增强该方法,以避免在传递propertyName的值时出现拼写错误。通过为参数指定属性,您不必传递要更改的属性的属性名称。您只需要调用不带参数的方法,属性就会负责传递适当的属性名称值。

protected virtual void OnPropertyChanged([CallerMemberName]string propertyName=null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

相关内容

最新更新