使用WPF Infragistics的MVVM模式Excel导出功能

3
我正在使用Infragistics WPF数据网格,并且希望利用Infragistics提供的Excel导出功能。Excel导出的API需要一个网格实例作为参数。这不太符合MVVM的要求,因为我更愿意在我的viewModel中处理导出数据的命令,但是它并不知道我视图中的datagrid控件实例。

有没有人知道一种更符合MVVM的机制来使用Infragistics库进行excel导出(最好基于网格所绑定的集合)?


这个问题在Infragistics论坛上有重复,链接在这里:http://community.infragistics.com/forums/p/51952/270915.aspx#270915 - Dav Evans
3个回答

8

由于需要参考网格,如你所知,你不应该把逻辑放在视图模型中。你只需在代码后台处理导出命令即可。从概念上讲,并没有错误或反-MVVM的地方:这个特定的逻辑恰好是与视图相关的。


1
数据网格是视图的一部分,将其导出到Excel是该网格的一个功能。 ViewModel没有任何参与。这是一个纯粹的视图活动。考虑到这是一个纯粹的视图功能,您不需要在ViewModel中处理导出命令,而是应该在View(代码后台)本身中处理。
如果明天您用另一个数据网格替换此数据网格,则导出到Excel的功能也将消失,因为它是由Infragistics提供的。因此,您的视图模型不应该做任何事情。但是,如果您想要实现一个通用且独立于Infragistics的功能,可以在ViewModel中实现(因为它是通用的,不依赖于Infragistics)。

0

简单来说,

您可以在XAML中像这样添加按钮,并使用命令参数传递网格。

<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.");

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接