2012-11-16 46 views
0

即時編寫Windows應用商店應用程序。
我有一個視圖(FavoritenGrid)與GridView。 此視圖與DataContext(FavoritenViewModel)一起使用。 而DataContext有一個List(FavList)。如何更新Gridview?

現在我想獲得最新的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我得到一個NullPointerException初始化列表。

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

該方法加載最新的FavList。但它沒有顯示在視圖中,我必須離開視圖並再次加載它才能看到更改。

FavList = await getFavoriten(); 

回答

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。