为什么 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
属性 绑定到 ViewModel
的 TextConnect
属性,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;
我开发了一个 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
属性 绑定到 ViewModel
的 TextConnect
属性,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;