我有这个非常简单的代码:
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立即执行的操作。
答案 0 :(得分:1)
现在我们已经确定了数据量的问题:
答案 1 :(得分:0)
尝试这样做。我不确定这是否有效。我认为在main中加载Excel会导致问题或死锁。
var xlData = Excel8OleDbHelper.ImportExcelFile(fileName);
var viewModel = new MyViewModel(fileName);
_window = new MyWindow(viewModel);
_window.ShowDialog();
public class MyViewModel
{
public MyViewModel(string filename)
{
filename = filename;
}
private string _filename;
private DataTable _xlData;
public DataTable XlData
{
return _xlData ?? (_xlData = Excel8OleDbHelper.ImportExcelFile(fileName);
}
}