XAML 以MVVM方式导出DataGrid

mbzjlibv  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(85)

如何以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}}"/>
nxagd54h

nxagd54h1#

您可以修改Scott Hanselman Blog Post about "From Linq To CSV"中的解决方案,使其仅使用未隐藏的列,并按照与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();
}
jtjikinw

jtjikinw2#

如果使用MVVM,那么ViewModel必须包含Grid的所有更改。例如,你应该创建一个buttonCommand,其中Execute的body看起来像这样:

{
     SaveMyListToCSV(parameter);
}

参数应该是或您的DataGrid,或您的源代码。

相关问题