C# 从LINQ查询结果填充可观察集合

C# 从LINQ查询结果填充可观察集合,c#,wpf,linq,xaml,mvvm,C#,Wpf,Linq,Xaml,Mvvm,我只是从wpfmvvm开始&我试图通过绑定到视图模型中的observeCollection来填充datagrid视图 我使用了一个简单的LINQ查询从我的表中选择all并填充我的可观察集合,但我的UI不会显示网格结果,可能是因为XAML必须绑定到公共属性 private void getTableResults() { var query = from c in LDB.myTable select c; var results = query;

我只是从wpfmvvm开始&我试图通过绑定到视图模型中的observeCollection来填充datagrid视图

我使用了一个简单的LINQ查询从我的表中选择all并填充我的可观察集合,但我的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,它是实体框架4.0 edmx。

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

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,因此RAISEProperty上的lambda发生了更改,但其他框架也有类似的实现。

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

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,因此RAISEProperty上的lambda发生了更改,但其他框架也有类似的实现。

让我猜猜。结果得到了IEnumerable?MyCollection必须是公共属性,而不是局部变量。请让你自己熟悉基本的。让我猜猜。结果得到了IEnumerable?MyCollection必须是公共属性,而不是局部变量。请熟悉的基础知识。好的,我理解您公开公共可观察集合属性的地方,但是如何从LINQ查询填充集合?@Hardgraf非常简单。分配MyCollection=。。。与之前一样,但没有将其声明为局部变量。删除OnPropertyChanged调用,就像现在在属性设置程序中一样。是的,我已经尝试过了。MyCollection=结果;但是编译器不能“隐式地将Iqueryable转换为ObservableCollection…@Hardgraf您之前做的哪一部分是如此难以理解的?”?Write MyCollection=新的ObservableCollectionresults;。好的,我理解这一点,您将公开一个公共可观察集合属性,但是如何从LINQ查询填充集合?@Hardgraf非常简单。分配MyCollection=。。。与之前一样,但没有将其声明为局部变量。删除OnPropertyChanged调用,就像现在在属性设置程序中一样。是的,我已经尝试过了。MyCollection=结果;但是编译器不能“隐式地将Iqueryable转换为ObservableCollection…@Hardgraf您之前做的哪一部分是如此难以理解的?”?Write MyCollection=新的ObservableCollectionresults;。