【发布时间】:2020-05-11 18:00:14
【问题描述】:
我在论坛上搜索了一些关于 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" });
}
}
现在,当我向模型类 PropertyChanged 事件添加断点时,它始终为空。我已经创建了视图模型对象并将其分配给 MainWindow 的 DataContext 但仍然为空。我无法理解在这个简单的应用程序中哪里出错了。我检查了绑定是否正常工作。
提前致谢
【问题讨论】:
-
你在视图中用
MyList做什么?只要视图没有绑定到该集合的 AModel 元素的属性,它的 PropertyChanged 事件当然会为空。为了使ObjViewModel.MyList.Add更新视图,请使用ObservableCollection,即public ObservableCollection<AModel> MyList。 -
@Clemens MyList 用于与 MainWindow 中的 DataGrid 绑定,并且 AModel 属性 A 与该 datagrid 列绑定。我知道 observable 集合,但我想找出如果 DataContext 被分配给 MainWindow,属性更改事件仍然为 null 的问题。
标签: .net wpf mvvm data-binding inotifypropertychanged