从LINQ查询结果填充Observable Collection

时间:2013-12-17 09:49:02

标签: c# wpf linq xaml mvvm

我刚开始使用WPF MVVM&我试图通过绑定到我的视图模型中的ObservableCollection来填充数据网格视图。

我使用了一个简单的LINQ查询来从我的表中选择所有并填充我的observable集合,但我的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已设置,我检查过它与另一个硬编码属性绑定。我哪里错了?我在集合上设置了一个断点,所以知道它正在被结果填充。如何公开从我的LINQ结果中填充的公共ObservableCollection属性?

由于

添加,我的数据模型是MyTable,它是一个Entity Framework 4.0 edmx。

1 个答案:

答案 0 :(得分:4)

假设您的视图的数据上下文是您的viewmodel,那么是 - 您的xaml绑定应该是您的viewmodel的公共属性。 因此,将“MyCollection”属性声明为viewmodel的属性(不是getTbaleResults方法的本地属性)。

private ObservableCollection<myTable> _myCollection;
/// <summary>
/// Gets or sets the myTable collection.
/// </summary>
public ObservableCollection<myTable> MyCollection
{
    get { return _myCollection; }
    set
    {
        if (value == _myCollection) return;
        _myCollection= value;
        RaisePropertyChanged(() => MyCollection);
    }
}

(注意这是使用Prism所以raisePropertyChanged上的lambda,但其他框架有类似的实现。)