[英]Propagate PropertyChanged in 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");
}
}
基本上,我想每次更改我的Collection時都為“ CollectionCount”更改一個屬性。
我本以為
App.Collection.PropertyChanged += Collection_PropertyChanged;
可以解決問題,但是方法沒有被調用(Collection類中的RaisePropertyChanged是!)...
我是MVVM的新手,所以我在這里可能會錯過一些顯而易見的事情,但我沒有看到。
您沒有收到PropertyChanged事件,因為該事件為時過早。 在構造Collection時調用它。 您不想知道整個集合實例何時更改,而是想知道集合中的項目何時更改。 在這種情況下,請使用此事件
Collection.Tracks.CollectionChanged + = OnTracksCollectionChanged;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.