When the items in MyList change dynamically,
Вы уведомляете, когда изменяется свойство списка ... что не распространяется на описанный выше сценарий. Для поддержки того, что вы хотите, я думаю, вам нужна коллекция, которая поддерживает интерфейс INotifyCollectionChanged.
http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx
Из коробки ObservableCollection поддерживает это. Это происходит от IList<T>
. Так что, возможно, вы могли бы сделать:
private IList<Fields> MyList;
private IList<Fields> MyObservableList;
public event PropertyChangedEventHandler PropertyChanged;
public IList<Fields> _theList
{
get
{
if (MyObservableList == null)
{
MyObservableList = new ObservableCollection<Fields>();
}
return MyObservableList;
}
set
{
if (MyList != value)
{
MyList = value;
MyObservableList = new ObservableCollection<Fields>(MyList );
// this will throw a null reference exception if no one' is listening. You
PropertyChanged(this, new PropertyChangedEventArgs("_theList"));
}
}
}
Если вы можете отказаться от экземпляра List<T>
за экземпляр ObserableCollection<T>
, вышеприведенное может быть еще проще:
private ObservableCollection<Fields> MyList;
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<Fields> _theList
{
get
{
if (MyList== null)
{
MyList= new ObservableCollection<Fields>();
}
return MyList;
}
set
{
if (MyList != value)
{
MyList = value;
// this will throw a null reference exception if no one' is listening. You should make a method OnPropertyChanged that checks if PropertyChanged != null.
PropertyChanged(this, new PropertyChangedEventArgs("_theList"));
}
}
}
Кроме того, как правило, закрытые члены - это _camelCase, а открытые члены - PascalCase ... не уверен, намеренно ли это.