2015-07-10 60 views
4

我已经在网络上查找了这一点,而且我没有发现任何东西似乎有所帮助。使用实体框架将数据绑定到WPF中的数据网格

我做了一个模型,并将模型作为对象添加到数据源。我认为它可以像数据集一样工作,我可以拖放到表单上,它会为我绑定数据。但是当我从模型中拖放时它会一直显示为空白。所以我在网上看,看到一些代码隐藏是必需的,这是我的,它仍然是空白。任何想法我做错了什么?

public partial class form1: Window 

{ 
    ComEntities context;; 
    public form1() 
    { 
     InitializeComponent(); 

    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     context = new ComEntities(); 

     System.Windows.Data.CollectionViewSource comEntitiesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("comEntitiesViewSource"))); 


     var permits = (from c in context.tBLPER.Local select c); 

     this.DataContext = context.tBLPER.Local; 
     tBLPERDataGrid.ItemsSource = context.tBLPER.Local; 

    } 


} 

XAML:

<DataGrid x:Name="tBLPERDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" Margin="10,10,10,413" ItemsSource="{Binding}" EnableRowVirtualization="True" AutoGenerateColumns="False"> 

    </DataGrid> 

回答

3

您需要实现您的查询(将数据带入内存)。你可以在调用ToList()方法,但更重要的是做到这一点:

context.TBLPER.Load(); 
this.DataContext = context.TBLPER.Local; // set the Window DataContext property 

Local属性获取一个ObservableCollection<T>表示在这个组中的所有AddedUnchangedModified实体的本地视图。随着实体从上下文中添加或删除,此本地视图将保持同步。同样,添加到本地视图或从本地视图删除的实体将自动添加到上下文或从上下文中删除。

如果你需要之前过滤数据(假设你的实体有一个名为Age财产,并希望20岁以上的用户),那么你可以这样做:

context.TBLPER.Where(t=>t.Age>20).Load(); 
this.DataContext = context.TBLPER.Local; 

另一件事,如果你想设置你的网格的ItemSource财产在你的窗口后面的代码,它没有任何意义创建一个绑定到你的XAML代码属性,因此将其删除:

<DataGrid ... ItemsSource="{Binding}" ...> 

如果你打算怎么办这个:

tBLPERDataGrid.ItemsSource=context.TBLPER.Local; 
+0

感谢您的信息,有点困惑我应该在哪里添加代码来实现查询。我尝试在window_Loaded和公共Form1()下,当我输入CEntities来加载表时,我给出的唯一选项是Equals和ReferenceEquals。 – Gisiota

+0

对不起,我有一个拼写错误,我编辑了我的答案 – octavioccl

+0

不用担心,谢谢你的帮助。我感到很蠢,数据网格现在显示了字段类型(例如日期选择器和文本框,在它们全部空白之前),但数据仍然不存在。我认为这与我的查询有关,我从来没有在任何地方使用变量许可,也不知道如何使用context.tblper.local方法绑定它。我更新了我目前拥有的window_loaded代码。 – Gisiota

0

如果设置的AutoGenerateColumns = “假”,你应该提供有关XAML列定义或设置的AutoGenerateColumns = “真”。这是第一件要做的事情。

1

你不应该设置ItemsSource两次(只需在你的代码后面设置 - 删除ItemsSource="{Binding}")。

此外,你应该设置AutoGenerateColumns="True",因为没有你需要DataGrid X Column元素添加到DataGrid

看看这里了解更多详情... http://www.wpf-tutorial.com/datagrid-control/custom-columns/

你也可以把一个断点在tBLPERDataGrid.ItemsSource = permits;行,以便您可以检查permits以确认它包含了所需的数据。

0

如果你想使用模型(也是ItemsSource="{Binding}"是我的一个提示,你想要的),比不要硬编码的ItemsSource。您在CEntities context;变量创建模型的对象,但你应该把它设置为窗口这样的DataContext属性:

DataContext = new CEntities(); 

和删除行

tBLPERDataGrid.ItemsSource = permits; 

现在的ItemsSource从未来CEntities实例。

相关问题