即时编写Windows应用商店应用程序 我有一个带有GridView的View(FavoritenGrid)。 此视图适用于DataContext(FavoritenViewModel)。 DataContext有一个List(FavList)。
现在我想在加载View时获取最新的FavList。
代码段:
public FavoritenGrid()
{
this.InitializeComponent();
_vm = ((FavoritenViewModel)this.DataContext);
((DataViewModel)this.DataContext).LoadDataCommand.Execute(null);
groupedItemsViewSource.Source = _vm.FavList;
(semanticZoom.ZoomedOutView as ListViewBase).ItemsSource = groupedItemsViewSource.View.CollectionGroups;
}
FavoritenViewModel列表
private ObservableCollection<FavoritenGroup<Draggable>> _favList;
public ObservableCollection<FavoritenGroup<Draggable>> FavList
{
get { return _favList; }
set
{
_favList = value;
RaisePropertyChanged("FavList");
}
}
FavoritenViewModel加载方法
private async Task loadData()
{
IsLoading = true;
FavList = new ObservableCollection<FavoritenGroup<Draggable>>();
FavList = await getFavoriten();
IsLoading = false;
}
如果我没有使用空List初始化List,我会得到NullPointerException。
FavList = new ObservableCollection<FavoritenGroup<Draggable>>();
此方法加载最新的FavList。但它没有在视图中显示,我必须离开视图并再次加载以查看更改。
FavList = await getFavoriten();
答案 0 :(得分:1)
您的视图在此实例中不会更新,因为ObservableCollection未被更新,它正在被替换。
如果我是你,我会做以下事。
FavoritenViewModel
private ObservableCollection<FavoritenGroup<Draggable>> _favList = new ObservableCollection<FavoritenGroup<Draggable>>();
public ObservableCollection<FavoritenGroup<Draggable>> FavList
{
get { return _favList; }
set
{
_favList = value;
RaisePropertyChanged("FavList");
}
}
然后删除loadData()方法中的FavList = new ObservableCollection<FavoritenGroup<Draggable>>();
。
接下来,当您更新列表时,而不是创建新的集合(从而替换您的ObservableCollection),我会尝试删除不再存在的项目,并添加新的项目(如果它们尚未存在)名单。 (您可以清除()项目,然后添加所有新项目。这将更新现有集合,应触发事件以更新UI。