Подтвердить что ты не робот

Список <строкa> Событие INotifyPropertyChanged

У меня есть простой класс со строковым свойством и свойством List, и у меня есть событие INofityPropertyChanged, но когда я делаю .Add в строку List, это событие не попадает, поэтому мой конвертер для отображения в ListView не является удар. Я угадываю, что измененное свойство не попало для добавления в список.... как я могу реализовать это, чтобы получить это событие с измененным событием?

Нужно ли использовать какой-либо другой тип коллекции?!

Спасибо за любую помощь!

namespace SVNQuickOpen.Configuration
{
    public class DatabaseRecord : INotifyPropertyChanged 
    {
        public DatabaseRecord()
        {
            IncludeFolders = new List<string>();
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        protected void Notify(string propName)
        {
            if (this.PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }
        #endregion

        private string _name;

        public string Name
        {
            get { return _name; }

            set
            {
                this._name = value;
                Notify("Name");
            }
        }

        private List<string> _includeFolders;

        public List<string> IncludeFolders
        {
            get { return _includeFolders; }

            set
            {
                this._includeFolders = value;
                Notify("IncludeFolders");
            }
        }
    }
}
4b9b3361

Ответ 1

Вы должны использовать ObservableCollection<string> вместо List<string>. И в вашем случае я бы сделал _includeFolders readonly - вы всегда можете работать с одним экземпляром коллекции.

public class DatabaseRecord : INotifyPropertyChanged 
{
    private readonly ObservableCollection<string> _includeFolders;

    public ObservableCollection<string> IncludeFolders
    {
        get { return _includeFolders; }
    }

    public DatabaseRecord()
    {
        _includeFolders = new ObservableCollection<string>();
        _includeFolders.CollectionChanged += IncludeFolders_CollectionChanged;
    }

    private void IncludeFolders_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        Notify("IncludeFolders");
    }

    ...

}

Ответ 2

Самый простой способ сделать работу привязки списка WPF - использовать коллекцию, которая реализует INotifyCollectionChanged. Проще всего сделать это, чтобы заменить или адаптировать ваш список ObservableCollection.

Если вы используете ObservableCollection, то всякий раз, когда вы изменяете список, он вызывает событие CollectionChanged - событие, которое сообщает привязке WPF к обновлению. Обратите внимание, что если вы поменяете фактический объект коллекции, вы захотите поднять событие propertychanged для фактического свойства коллекции.

Ответ 3

Ваш Список не будет автоматически запускать событие NotifyPropertyChanged для вас.

Элементы управления WPF, которые отображают свойство ItemsSource, предназначены для привязки к ObservableCollection<T>, который будет обновляться автоматически при добавлении или удалении элементов.