Jak wyeksportować zawartość DataGrid do pliku CSV w sposób MVVM? Moja DataGrid zawiera 55 kolumn. Wszystkie kolumny można zmienić lub ukryć.
Kolejność kolumn i widoczność są kontrolowane przez model widoku
<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 odpowiedzi
Możesz zmodyfikować rozwiązanie znalezione tutaj http://www.hanselman. com/blog/default.aspx?date=2010-02-04, aby używać tylko kolumn, które nie są ukryte i sortować kolumny w tej samej kolejności, co w modelu 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();
}
Jeśli używasz MVVM, twój ViewModel musi zawierać wszystkie zmiany twojej siatki. Powinieneś utworzyć na przykład button
i Command
, gdzie Execute
ciało będzie wyglądać tak:
{
SaveMyListToCSV(parameter);
}
Parametrem powinien być Twój DataGrid
lub Twoje źródło.
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.