Как связать список <object>с сеткой данных в Silverlight? - PullRequest
2 голосов
/ 12 марта 2010

Я пытаюсь создать простое приложение 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 во время выполнения, но это не работает.

Любые идеи о том, как я мог бы подойти к этому (или сделать это лучше)?

Ответы [ 2 ]

2 голосов
/ 12 марта 2010

Использование Datagrid.ItemsSource .

2 голосов
/ 12 марта 2010

Не нужно ли назначать источник данных свойству ItemsSource элемента управления Datagrid?

...