Экспорт DataGrid способом MVVM - PullRequest
2 голосов
/ 12 июля 2011

Как мне экспортировать содержимое DataGrid в файл CSV способом MVVM? Моя DataGrid содержит 55 столбцов. Все столбцы могут быть переупорядочены или скрыты.

Порядок столбцов и видимость контролируются моделью вида

<DataGridTextColumn Header="File Size"
                    DisplayIndex="{Binding Source={StaticResource Spy}, Path=DataContext.Columns.FileSize.Index, FallbackValue=8, Mode=TwoWay}"
                    Visibility="{Binding Source={StaticResource Spy}, Path=DataContext.Columns.FileSize.IsVisible, Converter={StaticResource VisibilityConverter}}"
                    Binding="{Binding Sample.FileSize, TargetNullValue={StaticResource NullString}}"/>

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Если вы используете MVVM, то ваша ViewModel должна содержать все изменения вашей Grid.Например, вы должны создать button и Command, где тело Execute будет выглядеть следующим образом:

{
     SaveMyListToCSV(parameter);
}

Параметр должен быть либо вашим DataGrid, либо вашим источником.

1 голос
/ 12 июля 2011

Вы можете изменить решение, найденное здесь http://www.hanselman.com/blog/default.aspx?date=2010-02-04, чтобы использовать только те столбцы, которые не скрыты, и сортировать столбцы в том же порядке, что и в ViewModel.

public string ToCsv(IEnumerable items)
{
    var csvBuilder = new StringBuilder();
    var properties = typeof(T).GetProperties().Where(prop => Columns[prop.Name].FileSize.IsVisible).OrderBy(prop => Column[prop.Name].FileSize.Index).ToArray();

    foreach (T item in items)
    {
        string line = string.Join(",",properties.Select(p => p.GetValue(item, null));
        csvBuilder.AppendLine(line);
    }
    return csvBuilder.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...