以MVVM方式导出DataGrid

时间:2011-07-12 03:58:49

标签: c# wpf xaml mvvm datagrid

如何以MVVM方式将DataGrid的内容导出为CSV文件? 我的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 个答案:

答案 0 :(得分:1)

您可以修改此处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();
}

答案 1 :(得分:1)

如果使用MVVM,则ViewModel必须包含Grid的所有更改。您应该创建一个button,例如Command,其中Execute正文如下所示:

{
     SaveMyListToCSV(parameter);
}

参数应该是您的DataGrid或您的来源。