Прежде всего, метод установки для типа коллекции, например вашего свойства MovieList, не вызывается при изменении содержимого коллекции (т. Е. Добавление / удаление элементов).
Это означает, что весь ваш установочный код для свойства MovieList не имеет смысла.
Во-вторых, это очень глупый код.Гораздо лучшим решением является использование NotifyPropertyWeaver .Тогда ваш код будет выглядеть следующим образом в viewmodel:
[DependsOn("MovieList")]
public bool HasMovies
{
get { return MovieList != null && MovieList.Count > 0; }
}
public ObservableCollection<Movie> MovieList
{
get;
private set;
}
В качестве альтернативы вам придется добавить прослушиватель для события CollectionChanged, когда вы инициализируете свойство MovieList в первый раз (нет причин иметь свойство backingдействительно нет причин!), а затем вызовите RaisePropertyChanged ("HasMovies") в обработчике событий.
Пример:
public class CP : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public CP()
{
MovieList = new ObservableCollection<Movie>();
MovieList.CollectionChanged += MovieListChanged;
}
public bool HasMovies
{
get { return MovieList != null && MovieList.Count > 0; }
}
public ObservableCollection<Movie> MovieList
{
get;
private set;
}
private void MovieListChanged(object sender, NotifyCollectionChangedEventArgs e)
{
RaisePropertyChanged("HasMovies");
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}