Я пытаюсь создать простое приложение Silverlight, которое включает в себя анализ файла CSV и отображение результатов в DataGrid
. Я настроил свое приложение на синтаксический анализ файла CSV, чтобы он возвращал List<CSVTransaction>
, содержащий свойства с именами: Date
, Payee
, Category
, Memo
, Inflow
, Outflow
.
Пользователь нажимает кнопку, чтобы выбрать файл для анализа, и в этот момент я хочу заполнить объект DataGrid
. Я думаю, что хочу использовать привязку данных, но я не могу понять, как заставить данные отображаться в сетке.
Мой XAML для DataGrid
выглядит так:
<data:DataGrid IsEnabled="False" x:Name="TransactionsPreview">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Date"
Binding="{Binding Date}" />
<data:DataGridTextColumn Header="Payee"
Binding="{Binding Payee}"/>
<data:DataGridTextColumn Header="Category"
Binding="{Binding Category}"/>
<data:DataGridTextColumn Header="Memo"
Binding="{Binding Memo}"/>
<data:DataGridTextColumn Header="Inflow"
Binding="{Binding Inflow}"/>
<data:DataGridTextColumn Header="Outflow"
Binding="{Binding Outflow}"/>
</data:DataGrid.Columns>
</data:DataGrid>
Код для файла xaml.cs выглядит следующим образом:
private void OpenCsvFile_Click(object sender, RoutedEventArgs e)
{
try
{
CsvTransObject csvTO = new CsvTransObject.ParseCSV();
//This returns a List<CsvTransaction> and passes it
//to a method which is supposed to set the DataContext
//for the DataGrid to be equal to the list.
BindCsvTransactions(csvTO.CsvTransactions);
TransactionsPreview.IsEnabled = true;
MessageBox.Show("The CSV file has a valid header and has been loaded successfully.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void BindCsvTransactions(List<CsvTransaction> listYct)
{
TransactionsPreview.DataContext = listYct;
}
Я думаю связать свойства CsvTransaction
с каждым DataGridTextColumn
в XAML, а затем установить DataContext
для DataGrid
на List<CsvTransaction
во время выполнения, но это не работает.
Любые идеи о том, как я мог бы подойти к этому (или сделать это лучше)?