在MVVM中使用WPF Infragistics Excel导出功能
我正在使用Infragistics WPF datagrid,我想利用Infragistics提供的Excel导出功能。Excel导出的需要网格实例作为参数。这对MVVM不是很友好,因为我更喜欢处理命令来导出viewModel中的数据,而viewModel不知道视图中datagrid控件的实例在MVVM中使用WPF Infragistics Excel导出功能,wpf,mvvm,export-to-excel,infragistics,Wpf,Mvvm,Export To Excel,Infragistics,我正在使用Infragistics WPF datagrid,我想利用Infragistics提供的Excel导出功能。Excel导出的需要网格实例作为参数。这对MVVM不是很友好,因为我更喜欢处理命令来导出viewModel中的数据,而viewModel不知道视图中datagrid控件的实例 有人知道使用Infragistics库进行excel导出(最好基于网格绑定到的集合)的更为MVVM友好的机制吗?由于需要对网格进行引用,如您所知,您不应该将逻辑放入视图模型中。您只需要在代码隐藏中处理Ex
有人知道使用Infragistics库进行excel导出(最好基于网格绑定到的集合)的更为MVVM友好的机制吗?由于需要对网格进行引用,如您所知,您不应该将逻辑放入视图模型中。您只需要在代码隐藏中处理Export命令。这样做并没有概念上的错误或反MVVM:这个特定的逻辑恰好是视图特定的。数据网格是视图的一部分,导出到excel是这个网格的一个功能。ViewModel完全没有参与。这是一个纯粹的视图活动。考虑到这是一个纯视图功能,您不能/不需要在ViewModel中处理导出命令,而是在视图(代码隐藏)本身中处理。 明天,如果您用另一个datagrid替换此datagrid,则导出到excel功能也将消失,因为它由infragistics提供。因此,视图模型不应该做任何事情。但是,如果您想实现非基础设施专用的通用和独立功能,可以在ViewModel中实现(因为它是通用的,不依赖于基础设施)。简单地说 您可以像这样在URXAML中添加按钮,并使用命令parmeter传递网格
<Button Content="Print" HorizontalAlignment="Left" Margin="201,35,0,0" Grid.Row="2" VerticalAlignment="Top" Width="75" Height="29"
Command="{Binding PrintCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=ParentC1DataGrid,Mode=OneWay}"
/>
在您的视图模型中添加以下命令:
private ICommand m_PrintCommand;
public ICommand PrintCommand
{
get {
if (this.m_PrintCommand == null)
{
this.m_PrintCommand = new DelegateCommand<C1.WPF.DataGrid.C1DataGrid>(PrintData);
}
return m_PrintCommand;
}
}
private void PrintData(C1.WPF.DataGrid.C1DataGrid v)
{
////put exporting code here
PrintDialog printDlg = new PrintDialog();
printDlg.PrintVisual(v, "Grid Printing.");
}
private ICommand m_PrintCommand;
公共ICommand print命令
{
得到{
if(this.m_PrintCommand==null)
{
this.m_PrintCommand=新的DelegateCommand(PrintData);
}
返回m_print命令;
}
}
私有void打印数据(C1.WPF.DataGrid.C1DataGrid v)
{
////把导出代码放在这里
PrintDialog printDlg=新建PrintDialog();
printDlg.PrintVisual(v,“网格打印”);
}
此问题在以下基础设施论坛上重复: