У меня есть класс:Propagate PropertyChanged в MVVM Windows Phone 8,1
public class Collection : INotifyPropertyChanged
{
public Collection()
{
this.tracks = new ObservableCollection<Track>();
}
public void addTrack(Track track)
{
if (this.tracks.Contains(track)) return;
this.tracks.Add(track);
RaisePropertyChanged("tracks");
}
public ObservableCollection<Track> tracks
{
get
{
return _tracks;
}
set
{
if (_tracks != value)
{
_tracks = value;
RaisePropertyChanged("tracks");
}
}
}
private ObservableCollection<Track> _tracks;
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
И в ViewModel:
public class ScanningPageViewModel : ViewModelBase
{
private INavigationService navigationService;
public ScanningPageViewModel(INavigationService navigationService)
{
App.Collection.PropertyChanged += Collection_PropertyChanged;
this.navigationService = navigationService;
this.LoadData();
}
private async void LoadData()
{
await CollectionService.PopulateCollection();
this.navigationService.NavigateTo("MainPage");
}
public int CollectionCount
{
get
{
return App.Collection.tracks.Count;
}
}
public void Collection_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
RaisePropertyChanged("CollectionCount");
}
}
В основном я хочу, чтобы поднять свойство изменилось "CollectionCount" каждый раз, когда мои изменения Коллекция ,
я бы подумал, что
App.Collection.PropertyChanged += Collection_PropertyChanged;
будет делать трюк, но метод не вызывался (в RaisePropertyChanged в классе коллекции!) ...
Я новичок в MVVM поэтому я мог бы пропустить что-то очевидное здесь, но я этого не вижу.
Вы пытались отладить приложение? Вы уверены, что коллекция в 'App.Collection.PropertyChanged + = Collection_PropertyChanged;' является той же коллекцией, которая впоследствии изменяется? Если это так, то дважды проверьте, что он имеет обработчик события 'Collection_PropertyChanged' в своем списке вызовов PropertyChanged, и что' this.PropertyChanged (this, new PropertyChangedEventArgs (propertyName)); 'на самом деле вызывается. –
Вы были правы, я снова инициализировал App.Collection, чтобы ViewModel больше не указывал на правильный экземпляр Collection. –