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);
}