Самым близким, который Вы получаете к этому, является очень ограниченный stackalloc оператор.
Метод ContentList Set не получит вызывается, когда вы изменяете значение внутри коллекции, вместо этого вы должны следить за срабатыванием события CollectionChanged .
public class CollectionViewModel : ViewModelBase
{
public ObservableCollection<EntityViewModel> ContentList
{
get { return _contentList; }
}
public CollectionViewModel()
{
_contentList = new ObservableCollection<EntityViewModel>();
_contentList.CollectionChanged += ContentCollectionChanged;
}
public void ContentCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//This will get called when the collection is changed
}
}
Хорошо, это дважды сегодня меня укусила неправильная документация MSDN. В ссылке, которую я вам дал, сказано:
Происходит, когда элемент добавляется, удаляется, изменен, перемещен или весь список
Но на самом деле не срабатывает при изменении элемента. Думаю, вам понадобится более грубый метод:
public class CollectionViewModel : ViewModelBase
{
public ObservableCollection<EntityViewModel> ContentList
{
get { return _contentList; }
}
public CollectionViewModel()
{
_contentList = new ObservableCollection<EntityViewModel>();
_contentList.CollectionChanged += ContentCollectionChanged;
}
public void ContentCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach(EntityViewModel item in e.OldItems)
{
//Removed items
item.PropertyChanged -= EntityViewModelPropertyChanged;
}
}
else if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach(EntityViewModel item in e.NewItems)
{
//Added items
item.PropertyChanged += EntityViewModelPropertyChanged;
}
}
}
public void EntityViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
//This will get called when the property of an object inside the collection changes
}
}
Если он вам очень понадобится, вы можете создать подкласс своего собственного ObservableCollection
, который запускает событие CollectionChanged
, когда член автоматически запускает событие PropertyChanged
(как сказано в документации ...)
ObservableCollection не будет распространять изменения отдельных элементов как события CollectionChanged. Вам нужно будет либо подписаться на каждое событие и пересылать его вручную, либо вы можете воспользоваться классом BindingList [T] , который сделает это за вас.