如何以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}}"/>
答案 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
或您的来源。