0

我正在编写一个 Windows 应用商店应用程序。
我有一个带有 GridView 的 View(FavoritenGrid)。此视图与 DataContext(FavoritenViewModel) 一起使用。并且 DataContext 有一个 List(FavList)。

现在我想在加载视图时获取最新的 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;
}

收藏夹视图模型列表

 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;
 }

如果我不使用空列表初始化列表,我会得到 NullPointerException。

FavList =  new ObservableCollection<FavoritenGroup<Draggable>>();

此方法加载最新的 FavList。但它没有显示在视图中,我必须离开视图并再次加载以查看更改。

FavList = await getFavoriten();
4

1 回答 1

1

在这种情况下,您的视图不会更新,因为 ObservableCollection 没有被更新,它正在被替换。

如果我是你,我会做以下事情。

收藏夹视图模型

private ObservableCollection<FavoritenGroup<Draggable>> _favList = new ObservableCollection<FavoritenGroup<Draggable>>();
public ObservableCollection<FavoritenGroup<Draggable>> FavList
{
    get { return _favList; }
    set
    {
        _favList = value;
        RaisePropertyChanged("FavList");
    }
}

然后删除FavList = new ObservableCollection<FavoritenGroup<Draggable>>();loadData() 方法中的。

接下来,当您更新列表时,我不会创建新集合(从而替换您的 ObservableCollection),而是尝试删除不再存在的项目,如果它们不在列表中,则添加新的项目。(您可以 Clear() 项目,然后添加所有新项目。这将更新现有集合并应该触发事件以更新 UI。

于 2012-11-16T13:20:57.080 回答