为什么静态属性更改为null



我开发了一个UWP应用程序。我有一个类Client,它通过套接字管理与另一个应用程序的连接。

在我的ViewModel类中,我有一个名为TextConnect的静态属性,它绑定到我的View中的一个文本框。

当建立连接时,我想在文本框中显示"已连接"。因此,我的ViewModel类实现了INotifyPropertyChanged,并且我有一个名为StaticPropertyChanged的静态EventHandler,我用它来通知视图我的TextConnect属性发生了更改:

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

在我的Client类中,当建立连接时,我更改了这个属性的值:

ViewModel.TextConnect = "Connected";

修改Client类中TextConnect属性的方法在另一个线程中运行。

但是,当我尝试更改属性的值时,我会出现一个错误,表明我的事件StaticPropertyChanged为null:

System.NullReferenceException : 'Object reference not set to an instance of an object.'

当我的属性绑定到文本框时,为什么StaticPropertyChanged为null?

当建立连接时,我想在文本框中显示"已连接"。因此,我的ViewModel类实现了INotifyPropertyChanged,并且我有一个名为StaticPropertyChanged 的静态EventHandler

如果您想将TextBoxText属性与ViewModelTextConnect属性绑定,TextConnect应该是非静态的,因为我们需要在set方法中调用PropertyChanged(不能在静态方法中运行(。如果要静态访问TextConnect,可以为ViewModel设置静态Current属性。有关详细步骤,请参阅以下代码。

Xaml

<ToggleSwitch Header="This is header" IsOn="{Binding IsOpen}" />

ViewModel

public class MainPageViewModel : INotifyPropertyChanged
{
public static MainPageViewModel Current;
public MainPageViewModel()
{
Current = this;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private bool _isOpen;
public bool IsOpen
{
get { return _isOpen; }
set { _isOpen = value; OnPropertyChanged(); }
}
}

用法

MainPageViewModel.Current.IsOpen = true;

相关内容

  • 没有找到相关文章

最新更新