c# - onpropertychanged - List<string> evento INotifyPropertyChanged
onpropertychanged c# (4)
Tengo una clase simple con una propiedad de cadena y una propiedad de lista y tengo implementado el evento INofityPropertyChanged, pero cuando hago un .Add a la cadena Enumerar este evento no se ve afectado, por lo que mi convertidor que se muestra en ListView no se ve afectado. Estoy adivinando que la propiedad cambiada no se encuentra en un Agregar a la lista ... ¿Cómo puedo implementar esto de manera que la propiedad cambie de evento?
¿Necesito usar algún otro tipo de colección?
¡Gracias por cualquier ayuda!
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");
}
}
}
}
Debe usar ObservableCollection<string>
lugar de List<string>
. Y, en su caso, haría que _includeFolders
sea de _includeFolders
lectura - siempre puede trabajar con una instancia de la colección.
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");
}
...
}
Debes echar un vistazo a ObservableCollection
La forma más sencilla de hacer que el enlace de lista de WPF funcione es usar una colección que implemente INotifyCollectionChanged
. Una cosa simple que hacer aquí es reemplazar o adaptar su lista con una ObservableCollection
.
Si usa ObservableCollection
, cada vez que modifique la lista, se generará el evento CollectionChanged, un evento que le indicará al enlace de WPF que se actualice. Tenga en cuenta que si cambia el objeto de colección real, deseará elevar el evento propertychanged para la propiedad de colección real.
Su lista no activará automáticamente el evento NotifyPropertyChanged.
Los controles WPF que exponen una propiedad de ItemsSource
están diseñados para estar vinculados a un ObservableCollection<T>
, que se actualizará automáticamente cuando se agreguen o eliminen elementos.