2013-12-17 84 views
1

我剛開始使用WPF MVVM &我試圖通過綁定到我的視圖模型中的ObservableCollection來填充datagrid視圖。從LINQ查詢結果填充Observable Collection

我已經使用一個簡單的LINQ查詢從我的表中選擇所有,並填充我的可觀察集合,但我的UI不會顯示網格結果,大概是因爲XAML必須綁定到公共屬性?

private void getTableResults() 
{ 
    var query = from c in LDB.myTable 
       select c; 
    var results = query; 

    ObservableCollection<myTable> MyCollection = new ObservableCollection<myTable>(results); 
    OnPropertyChanged("MyCollection"); 
} 

這裏是我的XAML綁定:

<DataGrid ItemsSource="{Binding MyCollection}" 

DataContext設置和我檢查它結合對另一硬編碼的屬性。我哪裏錯了?我在集合上放置了一個斷點,所以知道它正在被結果填充。我如何公開ObservableCollection屬性從我的LINQ結果中填充?

感謝

我想補充,我的數據模型是MyTable的是實體框架4.0 EDMX。

+0

讓我猜。你得到一個IEnumerable <>作爲結果? – Marco

+2

'MyCollection'必須是公共財產,而不是本地變量。請讓自己熟悉[數據綁定在WPF中]的基礎知識(http://msdn.microsoft.com/zh-cn/library/ms752347.aspx)。 – Clemens

回答

4

假設您的視圖的數據上下文是您的viewmodel,那麼是的 - 您的xaml綁定應該是您的viewmodel的公共屬性。 因此,將'MyCollection'屬性聲明爲viewmodel的屬性(不是getTbaleResults方法的本地屬性)。 (請注意,這是使用Prism所以RaisePropertyChanged上的lambda,但其他框架有類似的實現)。

+0

好吧,我明白你在哪裏公開Observable Collection屬性,但是如何從LINQ查詢填充集合? – Hardgraf

+0

@Hardgraf很簡單。像以前那樣分配'MyCollection = ...',但是*沒有*將其聲明爲局部變量。然後移除'OnPropertyChanged'調用,就像現在在屬性設置器中一樣。 – Clemens

+0

是的,我試過這樣做。 MyCollection =結果;但是編譯器不能'隱式地將Iqueryable轉換爲ObservableCollection ... – Hardgraf