【发布时间】:2016-04-09 15:52:45
【问题描述】:
我有一堂课:
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");
}
}
基本上,我想在每次我的 Collection 更改时为“CollectionCount”设置一个更改的属性。
我会这么认为
App.Collection.PropertyChanged += Collection_PropertyChanged;
可以解决问题,但没有调用该方法(Collection 类中的 RaisePropertyChanged 是!)...
我是 MVVM 的新手,所以我可能会在这里错过一些明显的东西,但我没有看到它。
【问题讨论】:
-
您是否尝试过调试您的应用程序?您确定
App.Collection.PropertyChanged += Collection_PropertyChanged;中的集合与后来更改的集合是同一个集合吗?如果是这样,请仔细检查它的PropertyChanged调用列表中是否有Collection_PropertyChanged事件处理程序,以及this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));是否实际被调用。 -
你是对的,我在某个地方再次初始化了 App.Collection,这样 ViewModel 就不再指向正确的 Collection 实例了。
标签: c# mvvm windows-phone-8.1 inotifypropertychanged