Вызов NotifyProportyChanged, когда добавление элементов в Список не работает, почему? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь понять, почему вызов функции (код ниже ...) для NotifyProportyChanged из AddNoteToList для обновления представления, когда элемент, добавленный в список, не работает.

Это работаетзамечательно, когда я делаю задание в списке, но если я пытаюсь добавить элементы, а затем вручную вызвать NotifyProportyChanged, это не так.

Я знаю, что для решения нужно использовать ObservableCollectionпроблема, но я хотел бы знать , почему эта реализация, которую я написал, не выполняет свою работу.

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);
    }
}

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

ItemsControl.ItemsSource является свойством зависимости и регистрирует изменение, только когда вы фактически устанавливаете значение для другого экземпляра коллекции - отправка события PropertyChanged недостаточна.

Как вы заметили, использованиеObservableCollection - это правильный способ заставить связанные элементы управления пользовательского интерфейса обнаруживать, что элементы были добавлены / удалены из вашего списка элементов.

0 голосов
/ 05 октября 2018

Даже если вы вызываете PropertyChanged, экземпляр объекта NotesListVM фактически не изменился, а только его содержимое.WPF достаточно оптимизирован, чтобы понять это и ничего не делать.

Если вы действительно хотите сделать это по-своему, вам нужно будет каждый раз создавать и назначать новый список.

Как вы говорите,вместо этого используйте ObservableCollection, что вызовет CollectionChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...