1

关系可能是用错词,但数据表是我以前用过的。我有 EF4 从 SQL 数据库中提取。客户、公司、部门等表格;通常进入组合框进行选择的东西。我将它们保存在静态列表中(只需要在应用程序启动时填充),并且我有一些组合框 itemssource 绑定到它们,这使得通过绑定 ViewModel 中的选定项目来轻松设置“关联”特定选择。

我的问题是,在某些地方,我只需要一个与数据网格中的 ID 关联的名称,仅用于显示。几百行的 CompanyId 必须是 CompanyName。我担心这里的表现。我可以在查找过程中使用 DB FK 来获取名称,但这似乎是一种浪费,因为我将它们全部放在静态列表中。我也不知道延迟加载是否意味着它们在数据绑定期间或在初始查询期间被查找。

这里最好的解决方案是什么?您可以使用静态列表制作 wpf 值转换器吗?我是否应该在获取数据后对数据执行 foreach,并查看静态列表中的值,将名称存储在对象中?

4

2 回答 2

1

您可以将此逻辑构建到您的查询中:

var viewModels = (from c in objectContext.Customers
                 select new MyGridViewModel {
                       CustomerId = c.CustomerId,
                       CompanyId = c.CompanyId,
                       CompanyName = c.Company.Name
                 }).ToList();

这将消除获取所有列的需要(仅返回 CustomerId、CompanyId 和 Company Name。您也不会懒惰地加载客户的公司。

然后您可以简单地将您的视图模型绑定到网格:

myGrid.ItemsSource = viewModels;
于 2011-08-12T21:57:49.447 回答
0

您不能将 ComboBox 所需的静态数据注入到每个 ViewModel 的构造函数中吗?

例如,在您的构造函数中,您可以传入 a ,List<Customer> customers或者如果您想避免使用实体对象,则可以传入 a List<CustomerViewModel> customerViewModels,它仅包含填充组合框所需的列。

如果您使用的是依赖注入框架,这将特别容易,但即使您不是,它也不应该太糟糕,这是一个很好的做法。

于 2011-08-12T22:14:03.537 回答