Wpf 向列表中添加项目时调用NotifyProportyChanged不起作用,为什么?

Wpf 向列表中添加项目时调用NotifyProportyChanged不起作用,为什么?,wpf,mvvm,observablecollection,inotifypropertychanged,Wpf,Mvvm,Observablecollection,Inotifypropertychanged,我试图理解为什么调用下面的函数代码。。。当添加到列表的项不工作时,从AddNoteToList更改为更新视图 当我在列表上做作业时,它工作得很好,但是如果我尝试添加项目,然后手动调用NotifyProportyChanged,它不会 我知道我应该使用ObservaleCollection来解决这个问题,但我想知道为什么我编写的这个实现没有起到作用 public class MainWindowVM : INotifyPropertyChanged { public Model.MainW

我试图理解为什么调用下面的函数代码。。。当添加到列表的项不工作时,从AddNoteToList更改为更新视图

当我在列表上做作业时,它工作得很好,但是如果我尝试添加项目,然后手动调用NotifyProportyChanged,它不会

我知道我应该使用ObservaleCollection来解决这个问题,但我想知道为什么我编写的这个实现没有起到作用

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必须重新创建多个可视项,而不是添加一个