线程返回值拆箱后ItemSource绑定的有关问题
线程返回值拆箱后ItemSource绑定的问题
WPF应用程序
开了一个BackgroundWorker用于后台运算,
运算结果为Entity的查询结果,将结果转换为匿名List对象赋值到 e.result上。
在线程调用方接收完成消息,并将结果绑定到柱状图上
现在的问题是,如果直接把ItemSource设置为匿名List的话,
会报 无法将类型“System.Windows.Documents.List”隐式转换为“System.Collections.IEnumerable” 这个错误
但是我不知道该怎么转换为 IEnumerable对象。
打断点的话,可以看到e.Result 的类型为:System.Collections.Generic.List<<>f__AnonymousType1<string,int>>
且可以看到实际的数据 [0] { date = "20130911", count = 57604 } <Anonymous Type>
但是就不知道怎么才能赋值到 ItemSource上。
------解决方案--------------------
试试这样行不行:
1、定义一个类:
2、匿名List改为:
------解决方案--------------------
以前曾经试过绑定到动态类型上(ExpandoObject),结果发现获取不到绑定数据。
如果你希望灵活的话,可以Select成Dictionary<string,object>代替匿名类试试。
------解决方案--------------------
IEnumerable集合不能ToList() ?
WPF应用程序
开了一个BackgroundWorker用于后台运算,
运算结果为Entity的查询结果,将结果转换为匿名List对象赋值到 e.result上。
//取得有效数据
var step1 = from p in DBContent.dailyData
select p;
//按照日期分类合计
var step2 = from p in step1
group p by p.tdate into g
select new {date = g.Key, count = g.Count() };
//设定返回值
e.Result = step2.ToList();
在线程调用方接收完成消息,并将结果绑定到柱状图上
void bkWork_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
var result = e.Result;
if (result != null)
{
ColumnSeries CS = new ColumnSeries();
CS.ItemsSource = result;
CS.IndependentValueBinding = new System.Windows.Data.Binding("date");
CS.DependentValueBinding = new System.Windows.Data.Binding("count");
chartView.Series.Add(CS);
}
}
现在的问题是,如果直接把ItemSource设置为匿名List的话,
会报 无法将类型“System.Windows.Documents.List”隐式转换为“System.Collections.IEnumerable” 这个错误
但是我不知道该怎么转换为 IEnumerable对象。
打断点的话,可以看到e.Result 的类型为:System.Collections.Generic.List<<>f__AnonymousType1<string,int>>
且可以看到实际的数据 [0] { date = "20130911", count = 57604 } <Anonymous Type>
但是就不知道怎么才能赋值到 ItemSource上。
------解决方案--------------------
试试这样行不行:
1、定义一个类:
public class MyTestType
{
public DateTime date { get; set; } //假设是DateTime
public Int32 count { get; set; } //假设是Int32
}
2、匿名List改为:
var step2 = from p in step1
group p by p.tdate into g
select new MyTestType { date = g.Key, count = g.Count() };
------解决方案--------------------
以前曾经试过绑定到动态类型上(ExpandoObject),结果发现获取不到绑定数据。
如果你希望灵活的话,可以Select成Dictionary<string,object>代替匿名类试试。
------解决方案--------------------
IEnumerable集合不能ToList() ?