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

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

空のリストでリストを初期化しないと、NullPointerExceptionが発生します。

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

このメソッドは、最新のFavListをロードします。ただし、ビューには表示されません。変更を確認するには、ビューを終了して再度ロードする必要があります。

FavList = await getFavoriten();
4

1 に答える 1

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

次にFavList = new ObservableCollection<FavoritenGroup<Draggable>>();、loadData() メソッドで を削除します。

次に、リストを更新するときに、新しいコレクションを作成する (それによって ObservableCollection を置き換える) のではなく、存在しないアイテムを削除し、リストにない場合は新しいアイテムを追加します。(アイテムを Clear() してから、すべての新しいアイテムを追加できます。これにより、既存のコレクションが更新れ、イベントが発生して UI が更新されます。

于 2012-11-16T13:20:57.080 に答える