C# WPF。无法强制转换类型为的对象
大家好,我有收藏:C# WPF。无法强制转换类型为的对象,c#,wpf,C#,Wpf,大家好,我有收藏: public class ActionData { private int iD; public int ID { get { return iD; } set { iD = value; } } private string roomType; public string RoomType { get { return roomType; } se
public class ActionData
{
private int iD;
public int ID
{
get { return iD; }
set { iD = value; }
}
private string roomType;
public string RoomType
{
get { return roomType; }
set { roomType = value; }
}
}
像这样
private void btnGridToExcel_Click(object sender, RoutedEventArgs e)
{
ExportExcel<ActionData, ActionDatas> exp = new ExportExcel<ActionData, ActionDatas>();
exp.GenerateReport();
ICollectionView view = CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource);
exp.dataToPrint = (ActionDatas)view.SourceCollection;
exp.GenerateReport();
}
有人知道我为什么会出现这样的错误吗?ActionDatas中的数据可能被隐式分配给SourceCollection(可能是XAML),这是一个可观察的集合(与列表不同)。作为一个ObservableCollection是一件好事,因为集合更改将自动通知正在侦听的WPF UI 您应该能够简单地分配ActionData并传输元素:
exp.dataToPrint = new ActionDatas();
foreach(ActionData data in view.SourceCollection) {
exp.dataToPrint.Add(data);
}
或者类似的东西
更新:如果您的datagrid ItemsSource已经是ActionDatas对象,那么您应该直接将其分配给DataTopPrint成员,无需将其放在视图中然后传输回新集合。填充视图的代码在哪里。SourceCollection?ICollectionView=CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource);如何设置dataGrid1.ItemsSource?从一个源创建视图,然后只使用该源的目的是什么?@svick这样做有很多原因-您可能想在UI中对数据进行排序,但一旦用户单击此按钮,就需要原始访问列表的原始形式。@cunningdave,但据我所知,视图从未接近UI。它只是用来访问它的来源,没有别的。
exp.dataToPrint = new ActionDatas();
foreach(ActionData data in view.SourceCollection) {
exp.dataToPrint.Add(data);
}