Список <строк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");
}
}
}
}
Ответы
Ответ 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>
, который будет обновляться автоматически при добавлении или удалении элементов.
Ответ 4
Вы должны взглянуть на ObservableCollection