INotifyPropertyChanged PropertyChanged 事件保持为空
INotifyPropertyChanged PropertyChanged event remains null
我在论坛上搜索过,其他一些关于 PropertyChanged 事件的资源仍然为空,但没有找到任何解决方案。我使用 AModel、AViewModel 和 MainWindow 创建了一个示例 WPF 应用程序。 Model 和 ViewModel 已实现 INotifyPropertyChanged 接口,但在运行时检查时,两个 PropertyChanged 事件都保持为空。申请代码如下:
public class AModel : INotifyPropertyChanged
{
public AModel()
{
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyname = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
}
}
private string _A;
public string A
{
get
{
return _A;
}
set
{
_A = value;
NotifyPropertyChanged("A");
}
}
}
public class AViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyname = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
}
}
public AViewModel()
{
MyList = new List<AModel>();
}
private List<AModel> _MyList;
public List<AModel> MyList
{
get
{
return _MyList;
}
set
{
_MyList = value;
}
}
}
public partial class MainWindow : Window
{
private AViewModel _objViewModel=new AViewModel();
public AViewModel ObjViewModel
{
get
{
return _objViewModel;
}
set
{
_objViewModel = value;
}
}
public MainWindow()
{
InitializeComponent();
ObjViewModel = new AViewModel();
DataContext = ObjViewModel;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ObjViewModel.MyList.Add(new AModel() { A = "Sample Text" });
}
}
现在,当我向我的模型添加断点时 class PropertyChanged 事件始终为空。我已经创建了视图模型的对象并将其分配给 MainWindow 的 DataContext 但仍然为空。在这个简单的应用程序中,我无法理解我哪里出错了。我已经检查了工作正常的绑定。
提前致谢
PropertyChanged 事件在此处为空,因为 属性 实际上并未更改。您正在创建一个集合,然后将其绑定到 UI 控件。如果你想看到 属性 改变被触发,那么你可以试试这个:-
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<DataGrid Margin="20" AutoGenerateColumns="True" ItemsSource="{Binding MyList}"/>
<ListBox Grid.Row="1" ItemsSource="{Binding MyList}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Grid.Row="2" HorizontalAlignment="Center" Margin="20" Content="Click Me" Click="Button_Click"/>
</Grid>
因此,当您尝试更新文本框中的项目时:-
<DataTemplate>
<TextBox Text="{Binding A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
然后您会注意到 属性 更改会在您输入文本框时立即触发:-
{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}
如果您需要更多说明,请发表评论。
我在论坛上搜索过,其他一些关于 PropertyChanged 事件的资源仍然为空,但没有找到任何解决方案。我使用 AModel、AViewModel 和 MainWindow 创建了一个示例 WPF 应用程序。 Model 和 ViewModel 已实现 INotifyPropertyChanged 接口,但在运行时检查时,两个 PropertyChanged 事件都保持为空。申请代码如下:
public class AModel : INotifyPropertyChanged
{
public AModel()
{
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyname = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
}
}
private string _A;
public string A
{
get
{
return _A;
}
set
{
_A = value;
NotifyPropertyChanged("A");
}
}
}
public class AViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyname = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
}
}
public AViewModel()
{
MyList = new List<AModel>();
}
private List<AModel> _MyList;
public List<AModel> MyList
{
get
{
return _MyList;
}
set
{
_MyList = value;
}
}
}
public partial class MainWindow : Window
{
private AViewModel _objViewModel=new AViewModel();
public AViewModel ObjViewModel
{
get
{
return _objViewModel;
}
set
{
_objViewModel = value;
}
}
public MainWindow()
{
InitializeComponent();
ObjViewModel = new AViewModel();
DataContext = ObjViewModel;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ObjViewModel.MyList.Add(new AModel() { A = "Sample Text" });
}
}
现在,当我向我的模型添加断点时 class PropertyChanged 事件始终为空。我已经创建了视图模型的对象并将其分配给 MainWindow 的 DataContext 但仍然为空。在这个简单的应用程序中,我无法理解我哪里出错了。我已经检查了工作正常的绑定。
提前致谢
PropertyChanged 事件在此处为空,因为 属性 实际上并未更改。您正在创建一个集合,然后将其绑定到 UI 控件。如果你想看到 属性 改变被触发,那么你可以试试这个:-
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<DataGrid Margin="20" AutoGenerateColumns="True" ItemsSource="{Binding MyList}"/>
<ListBox Grid.Row="1" ItemsSource="{Binding MyList}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Grid.Row="2" HorizontalAlignment="Center" Margin="20" Content="Click Me" Click="Button_Click"/>
</Grid>
因此,当您尝试更新文本框中的项目时:-
<DataTemplate>
<TextBox Text="{Binding A,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
然后您会注意到 属性 更改会在您输入文本框时立即触发:-
{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}
如果您需要更多说明,请发表评论。