Использование функциональности экспорта WPF Infragistics Excel с MVVM - PullRequest
3 голосов
/ 07 февраля 2011

Я использую сетку данных Infragistics WPF и хочу использовать функции экспорта в Excel, которые предоставляет Infragistics. Для API для экспорта в Excel в качестве параметра требуется экземпляр сетки. Это не очень удобно для MVVM, так как я предпочел бы обработать команду для экспорта данных в моей viewModel, которая не знала бы об экземпляре элемента управления сеткой данных в моем представлении.

Кто-нибудь знает о более дружественном MVVM-механизме для экспорта в Excel (предпочтительно на основе коллекции, к которой привязана сетка) с использованием библиотек Infragistics?

Ответы [ 3 ]

8 голосов
/ 07 февраля 2011

Из-за требуемой ссылки на сетку, как вы знаете, не следует помещать логику в модель представления.Вам просто нужно обработать команду Export в вашем коде.В этом нет ничего плохого концептуально или анти-MVVM: эта конкретная логика просто зависит от View.

1 голос
/ 27 июня 2011

Сетка данных является частью просмотра, и экспорт в Excel является особенностью этой сетки.Нет никакого участия ViewModel вообще.Это чистый случай активности View.Рассматривая это как функцию представления apure, вы не можете / не должны обрабатывать команду экспорта в ViewModel, но в самом представлении (code-behind).Завтра, если вы замените эту сетку данных другой сетью, функция экспорта в Excel также будет работать, так как она предоставляется Infragistics.Следовательно, ваша модель представления не должна ничего делать.Однако, если вы хотите реализовать универсальные и независимые функциональные возможности, которые не относятся к инфраструктуре, вы можете сделать это в ViewModel (поскольку она универсальна и не зависит от инфраструктуры).

0 голосов
/ 08 января 2014

просто,

вы можете добавить кнопку в ваш 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.");

    }
...