我有这个非常简单的代码:
var xlData = Excel8OleDbHelper.ImportExcelFile(fileName);
var viewModel = new MyViewModel(xlData);
_window = new MyWindow(viewModel);
_window.ShowDialog();
该Excel8OleDbHelper.ImportExcelFile()
方法有效,我可以在调试时查看DataTable的内容。问题是它_window
根本不显示并且线程的行为就像它一样(即它正在等待关闭未显示的窗口)。
如果我为此更改代码:
var viewModel = new MyViewModel(new DataTable());
_window = new MyWindow(viewModel);
_window.ShowDialog();
然后窗口出现,但当然是一个空的网格。
网格的 XAML:
<DataGrid x:Name="MyGrid" Margin="4"
IsReadOnly="True" SelectionUnit="Cell"
ItemsSource="{Binding Path=GridSource}" />
以及 ViewModel 的构造函数:
public DataView GridSource { get; private set; }
public MyViewModel(DataTable dataSource)
{
GridSource = dataSource.DefaultView;
}
这是我第一次使用 WPF 数据网格,所以也许我在这里做错了,但我真的不明白网格有什么问题会阻止窗口出现,没有给我一个例外,实际上冻结我的应用程序。
有什么线索吗?如果缺少任何东西,我很乐意提供更多代码!
更新
加载 116 行 x 47 列的 Excel 工作簿有效;我需要加载的文件有 5,000+ 行 x 47 列 - WPF DataGrid 是否需要对更大的数据集进行分页?WinForms DataGridView 没有问题,而且速度更快,我认为它的 WPF 对应物会以类似的方式工作。所以问题是ShowDialog
等待数据网格加载数据。我认为它已挂起,因为我没想到 WPF DataGrid 会花费一分钟以上的时间来完成 WinForms DataGridView 立即执行的操作。