我刚开始使用 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,但其他框架也有类似的实现)。
