使用Entity Framework将数据绑定到WPF中的数据网格

Gis*_*ota 5 c# data-binding wpf entity-framework

我已经在网上看了这个,我发现的任何东西似乎都没有帮助.

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

   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;

    }


}
Run Code Online (Sandbox Code Playgroud)

XAML:

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

    </DataGrid>
Run Code Online (Sandbox Code Playgroud)

oct*_*ccl 5

您需要具体化您的查询(将数据带入内存)。您可以调用该ToList()方法,但更好的是这样做:

 context.TBLPER.Load();  
 this.DataContext = context.TBLPER.Local;  // set the Window DataContext property
Run Code Online (Sandbox Code Playgroud)

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

如果您之前需要过滤数据(假设您的实体有一个名为的属性Age并希望用户年龄超过 20 岁),那么您可以这样做:

 context.TBLPER.Where(t=>t.Age>20).Load();  
 this.DataContext = context.TBLPER.Local; 
Run Code Online (Sandbox Code Playgroud)

另一件事,如果您想ItemSource在窗口后面的代码中设置Grid的属性,则在 xaml 代码中创建对该属性的绑定是没有意义的,因此将其删除:

<DataGrid ... ItemsSource="{Binding}" ...>
Run Code Online (Sandbox Code Playgroud)

如果你打算这样做:

tBLPERDataGrid.ItemsSource=context.TBLPER.Local;
Run Code Online (Sandbox Code Playgroud)