为什么 staticpropertychanged 为空?

Why is staticpropertychanged null?

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

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

我想在建立连接后在文本框中显示"Connected"。因此,我的 ViewModel class 实现了 INotifyPropertyChanged,并且我有一个名为 StaticPropertyChanged 的​​静态事件处理程序,用于通知视图我的 TextConnect 属性 已更改:

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

并且在我的客户端 class 中,我在建立连接时更改了此 属性 的值:

ViewModel.TextConnect = "Connected";

在我的客户端 class 中修改 TextConnect 属性 的方法在另一个线程中运行。

但是当我尝试更改 属性 的值时,出现错误,提示我的事件 StaticPropertyChanged 为空:

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

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

I want to display "Connected" in the textbox when the connection is established. So, my ViewModel class implement INotifyPropertyChanged, and I have a static EventHandler named StaticPropertyChanged

如果要将 TextBox Text 属性 绑定到 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;