关系可能是错误的用词,但数据表是我之前使用过的。我从SQL数据库中提取EF4。客户,公司,部门等表格;通常会进入Comboboxes选择的东西。我在静态列表中持有它们(只需要在app启动时填充),并且我有几个组合框项目源绑定到它们,这使得通过绑定ViewModel中的选定项目来轻松设置“关联”特定选择。
我的问题是,在一些地方我只需要一个与数据网格中的ID相关联的名称,仅供显示。带有CompanyId的几百行需要是CompanyName。我担心这里的表现。我可以使用DB FK来查找查找期间的名称,但这似乎是一种浪费,因为我将它们全部放在静态列表中。我也不知道延迟加载是否意味着他们在数据绑定期间或初始查询期间被查找。
这里最好的解决方案是什么?你能用静态列表制作一个wpf值转换器吗?我应该在获取数据后对数据执行foreach,并查看静态列表中的值,将Name存储在对象中吗?
答案 0 :(得分: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。您也不会懒得加载客户公司。
然后,您可以简单地将View Models绑定到网格:
myGrid.ItemsSource = viewModels;
答案 1 :(得分:0)
难道你不能将ComboBoxes所需的静态数据注入到每个ViewModel的构造函数中吗?
例如,在构造函数中,您可以传入List<Customer> customers
,或者如果您想避免使用实体对象,则可以传入List<CustomerViewModel> customerViewModels
,其中只包含填充所需的列组合框。
如果您正在使用依赖注入框架,这将特别容易,但即使您不是,也不应该太糟糕,这是一个很好的做法。