使用LINQ2SQL DataContext表作为其ItemsSource时的正确使用DataGrid的方法(最佳实践)

时间:2011-02-22 20:18:33

标签: c# wpf linq-to-sql datagrid

所以,我正在通过构建一个简单的UI来学习Linq2SQL。我使用两个DataGrids来显示主/详细信息类型接口,其中“Customers”显示在一个网格中,并且在选中时,一些细节显示在另一个网格中(例如,来自外键表的记录,例如“Orders”) ,无论如何)。

现在,我读过的关于使用DataGrid的每个例子都显示如下:

using( var db = new TestDataContext() )
{
    // AutoGenerateColumns set to false and 
    // column bindings set to certain properties 
    // of the Customer class.
    grid.ItemsSource = db.Customers.ToList();
}

嗯,这不起作用,因为在执行此代码后由于数据绑定而访问DataContext,当然,Context对象已经被处理掉了。好没关系;我可以为我的所有网格操作使用单个DataContext,即使DataContext类被设计为快速使用和处理。我不确定在未来保留一个DataContext是否会让我受伤。

所以现在我遇到了更新数据库并将这些更改反映回网格的问题。我遇到的最简单的方法是将ItemsSource设置为null,然后再次将其绑定到表中。这对我来说只是感觉“肮脏”,我不得不想象我错过了什么。从理论上讲,我可以使用ObservableCollection并将其绑定到网格,使其与底层数据保持同步,但我还没有弄清楚如何让网格显示来自可观察集合的数据(我将它绑定在XAML和表中只呈现空行。

TLDR:

所以无论如何,我的问题是这个; LINQ2SQL人员在这种情况下使用了哪些模式?似乎我能找到的所有例子都过于简单化,并不适用于现实世界的用例(即使是像我一样简单的用例)。基本上,您如何使用DataContext,如何在将新项目添加到表格时更新网格,以及这里的一般最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

在您提供的示例代码中,如果绑定到延迟加载的属性,则只能通过绑定再次访问datacontext。 您是否看过datacontext上的LoadOptions.LoadWith<>()函数(假设自从我上次查看linqtosql后它还没有被重命名)

就我个人而言,抓住datacontext并保持页面生命周期没有问题,但整个应用程序生命周期都没有。