## Классы ``` namespace WpfApp2.model { public class Spares { public string name { get; set; } public int price { get; set; } public string detail { get; set; } public string type { get; set; } public List SparesDetailList { get; set; } public List SparesPriceList { get; set; } public List SparesTypeList { get; set; } } } ``` ``` namespace WpfApp2.model { class Globals { public static IDataProvider dataProvider; } } ``` ``` namespace WpfApp2.model { public class SparesDetail { public string title { get; set; } } public class SparesPrice { public string title { get; set; } public int PriceFrom { get; set; } public int PriceTo { get; set; } } public class SparesType { public string title { get; set; } } } ``` ## Mainwindow.xaml(Изменения с прошлой работы) Добавил пару строчек для отображения информации ``` ``` ## Mainwindow.xaml.cs(Изменения с прошлой работы) прописал csv ``` public MainWindow() { InitializeComponent(); DataContext = this; Globals.dataProvider = new LocalDataProvider(); SparesList = Globals.dataProvider.getSpares(); SparesDetailList = Globals.dataProvider.getDetail().ToList(); SparesDetailList.Insert(0, new SparesDetail { title = "Деталь" }); SparesPriceList = Globals.dataProvider.getPrice().ToList(); SparesTypeList = Globals.dataProvider.getType().ToList(); SparesTypeList.Insert(0, new SparesType { title = "Тип ТС" }); Globals.dataProvider = new CSVDataProvider(); SparesList = Globals.dataProvider.getSpares(); } private bool sortAsc = true; private void RadioButton_Checked(object sender, RoutedEventArgs e) { sortAsc = (sender as RadioButton).Tag.ToString() == "1"; Invalidate(); } ``` # Добавил новый класс ``` using System; using System.Collections.Generic; using System.Formats.Asn1; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using CsvHelper; using WpfApp2; namespace WpfApp2.model { public class CSVDataProvider : LocalDataProvider, IDataProvider { private List SparesList; // конструктор класса public CSVDataProvider() { using (var reader = new StreamReader("./data.csv")) { using (var csv = new CsvReader( reader, CultureInfo.InvariantCulture)) { // CsvHelper использует отложенное чтение через // yeld, поэтому сразу преобразуем в список SparesList = csv.GetRecords().ToList(); } } } public IEnumerable getSpares() { return SparesList; } } } ``` # Скрины работы ![](./img/1.jpg)