所以,我正在通过构建一个简单的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,如何在将新项目添加到表格时更新网格,以及这里的一般最佳做法是什么?
答案 0 :(得分:2)
在您提供的示例代码中,如果绑定到延迟加载的属性,则只能通过绑定再次访问datacontext。 您是否看过datacontext上的LoadOptions.LoadWith<>()函数(假设自从我上次查看linqtosql后它还没有被重命名)
就我个人而言,抓住datacontext并保持页面生命周期没有问题,但整个应用程序生命周期都没有。