我已经成功设置了一个带有March 2009 WPF Toolkit的WPF Datagrid,从Northwind数据库创建了LINQ-to-SQL类,用这段代码绑定了WPF网格:
var customers = from c in _db.Customers
select c;
TheDataGrid.ItemsSource = customers;
我可以从左到右移动列,让删除列工作等等。
但是,当我单击列标题对其进行排序时,我在“输出”窗口中得到大约20对错误,看起来好像每列都有一对错误:
System.Windows.Data错误:1:无法创建默认转换器 执行“双向”转换 类型 'System.Data.Linq.EntitySet`1 [TestDataGrid566.Model.Order]' 和'System.String'。考虑使用 绑定的转换器属性。 BindingExpression:路径=订单; 的DataItem = '客户' (的HashCode = 4925117);目标元素是 'TextBlock'(Name ='');目标财产 是'文字'(类型'字符串')
System.Windows.Data错误:5:BindingExpression产生的值是 对目标财产无效。 值= 'System.Data.Linq.EntitySet`1 [TestDataGrid566.Model.Order]' BindingExpression:路径=订单; 的DataItem = '客户' (的HashCode = 4925117);目标元素是 'TextBlock'(Name ='');目标财产 是'文字'(类型'字符串')
当我创建LINQ-to-SQL类时,我只是将所有表从数据库拖到模型设计器并保存,因此这些类都是默认代码。
这些错误告诉我什么?我是不是没有正确设置LINQ-to-SQL类,还是指向更深层次的东西?
答案 0 :(得分:4)
我认为您应该将查询转换为列表。
var customers = from c in _db.Customers
select c;
TheDataGrid.ItemsSource = customers.ToList(); //note the .ToList() call
否则,DataGrid会尝试重新枚举查询,这是一个坏主意,因为查询结果是一个延迟加载的集合。