Skip to main content
 首页 » 编程设计

c#之从 LINQ 查询结果填充 Observable 集合

2024年02月13日26yxwkf

我刚开始使用 WPF MVVM,我试图通过绑定(bind)到 View 模型中的 ObservableCollection 来填充数据 GridView 。

我使用了一个简单的 LINQ 查询来从我的表中选择所有内容并填充我的可观察集合,但我的 UI 不显示网格结果,大概是因为 XAML 必须绑定(bind)到公共(public)属性?

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 绑定(bind):

<DataGrid ItemsSource="{Binding MyCollection}" 

我的 DataContext 已设置,我已检查它是否与另一个硬编码属性绑定(bind)。我哪里错了?我在集合上放置了一个断点,因此知道它正在由结果填充。如何公开从我的 LINQ 结果填充的公共(public) ObservableCollection 属性?

谢谢

补充一下,我的数据模型是 MyTable,它是一个 Entity Framework 4.0 edmx。

请您参考如下方法:

假设您的 View 的数据上下文是您的 View 模型,那么是的 - 您的 xaml 绑定(bind)应该是 View 模型的公共(public)属性。 因此,将您的“MyCollection”属性声明为 View 模型的属性(而不是 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,但其他框架也有类似的实现)。