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