如何更新Gridview?

时间:2012-11-16 12:34:03

标签: c# windows-8 windows-runtime

即时编写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();

1 个答案:

答案 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。