Wpf 向列表中添加项目时调用NotifyProportyChanged不起作用,为什么?
我试图理解为什么调用下面的函数代码。。。当添加到列表的项不工作时,从AddNoteToList更改为更新视图 当我在列表上做作业时,它工作得很好,但是如果我尝试添加项目,然后手动调用NotifyProportyChanged,它不会 我知道我应该使用ObservaleCollection来解决这个问题,但我想知道为什么我编写的这个实现没有起到作用Wpf 向列表中添加项目时调用NotifyProportyChanged不起作用,为什么?,wpf,mvvm,observablecollection,inotifypropertychanged,Wpf,Mvvm,Observablecollection,Inotifypropertychanged,我试图理解为什么调用下面的函数代码。。。当添加到列表的项不工作时,从AddNoteToList更改为更新视图 当我在列表上做作业时,它工作得很好,但是如果我尝试添加项目,然后手动调用NotifyProportyChanged,它不会 我知道我应该使用ObservaleCollection来解决这个问题,但我想知道为什么我编写的这个实现没有起到作用 public class MainWindowVM : INotifyPropertyChanged { public Model.MainW
public class MainWindowVM : INotifyPropertyChanged
{
public Model.MainWindowModel Model { get; set; }
public List<DataProtocol.Note> _notesListVM;
public List<DataProtocol.Note> NotesListVM
{
get
{
return _notesListVM;
}
set
{
_notesListVM = value;
NotifyProportyChanged("NotesListVM");
}
}
//dp:
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyProportyChanged(string propName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
//Command:
public RelayCommand AddNoteCommand { get; set; }
public void AddNoteToList(object parm)
{
string value = parm.ToString();
NotesListVM.Add(new DataProtocol.Note(value));
NotifyProportyChanged("NotesListVM");
}
public MainWindowVM()
{
Model = new PL.Model.MainWindowModel();
NotesListVM = Model.NotesList;
AddNoteCommand = new RelayCommand(AddNoteToList);
}
}
即使您正在提升PropertyChanged,对象实例NotesListVM实际上并没有发生更改,只有其内容发生了更改。WPF经过了充分的优化,可以实现这一点,而不做任何事情
如果你真的想按自己的方式去做,你需要每次创建并分配一个新的列表
正如您所说,改用ObservableCollection,它将触发CollectionChanged。ItemsControl.ItemsSource是一个依赖属性,仅当您实际将值设置为其他集合实例时才会注册更改-发送PropertyChanged事件是不够的
正如您所指出的,使用ObservableCollection是让绑定的U.I.控件检测到项目已从项目列表中添加/删除的正确方法。因为列表的实例没有更改。ObservableCollection实现InotifyCollectionChanged,视图使用它来等待列表内容的更新。您需要每次创建并分配一个新列表。不是真的。将属性设置为null并重新分配上一个列表也可以。缺点是ItemsControl必须重新创建多个可视项,而不是添加一个