2016-04-19 86 views
0

所以我的UserControl中有一個DataGrid。它是我的視圖模型中observable collection的數據綁定。 ViewModel實現了INotifyPropertyChanged接口,並在視圖中進行了適當的連接。當查詢被觸發時Datagrid不會更新

筆者認爲:

<DataGrid AutoGenerateColumns="False" 
      EnableRowVirtualization="True" 
      ItemsSource="{Binding ContributionCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 

<!-- DataGrid rows --> 

/> 

,並在視圖模型:

private ObservableCollection<contribution> _contributionCollection; 
    public ObservableCollection<contribution> ContributionCollection 
    { 
     get 
     { 
      return _contributionCollection; 
     } 
     set 
     { 
      _contributionCollection= value; 
      OnPropertyChanged("ContributionCollection"); 
     } 
    } 

是什麼意思發生,是;只需點擊一個特定的按鈕,查詢就會觸發數據庫並帶回一些結果。這些結果意味着在Datagrid中顯示。

// Fired by an ICommand Property 
    public object Contributions_CommandExecute(object param)           
    { 
     var queryContributions = context.contributions.Where(c => c.member == Member); 
     return _contributionCollection = new ObservableCollection<contribution>(queryContributions); 
    } 

但是datagrid總是空的。該應用程序凍結了一段時間,表明背景中正在發生某些事情,但實際上沒有任何事情在視圖上傳達。事實上,它唯一正常工作的時間是ViewModel構造函數在初始化時觸發查詢。但之後呢,它不會再發射了。

任何想法,我要去哪裏錯了?

回答

1

此行

return _contributionCollection = new ObservableCollection<contribution>(queryContributions); 

只更新領域的價值。由於它不使用屬性setter,OnPropertyChanged("ContributionCollection");不叫

的溶液與物業工作(順便說一下,爲什麼方法不作廢?)

// Fired by an ICommand Property 
public void Contributions_CommandExecute(object param) 
{ 
    var queryContributions = context.contributions.Where(c => c.member == Member); 
    ContributionCollection = new ObservableCollection<contribution>(queryContributions); 
} 
+0

深表謝意。除此之外,事實證明我也忘了添加'INotifyPropertyChanged'接口。 – Offer

0

你必須更新列表一個調度程序,讓你鴕鳥政策interupt的GUI是這樣的:

Dispatcher.BeginInvoke(new Action(() => _contributionCollection = new ObservableCollection<contribution>(queryContributions))); 

我有一個類似的問題:

Update Observable Collection

1

查看

<DataGrid AutoGenerateColumns="False" 
      EnableRowVirtualization="True" 
      ItemsSource="{Binding ContributionCollection}"> 

<!-- DataGrid rows --> 

/> 

視圖模型

public void Contributions_CommandExecute(object param)           
    { 
     ContributionCollection = new ObservableCollection<contribution>(context.contributions.Where(c => c.member == Member)); 
    } 
相關問題