Как заполнить вложенные данные с помощью DataGrid в WPF - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу заполнить вложенные данные в столбцах dataGrid в wpf, и мне нужно присоединить модель основного класса к источнику элементов данных, поэтому я не знаю, как использовать и заполнить эти детали внутри нее.

Модели:

public class SESSION
{
    public string open { get; set; }
    public string high { get; set; }
    public string low { get; set; }
    public string last { get; set; }
}

public class QUOTE
{
    public string symbol { get; set; }
    public string name { get; set; }
    public List<SESSION> SESSION { get; set; }
}

public class RootObject
{
    public List<QUOTE> QUOTE { get; set; }
}

и моя таблица данных находится в файле xaml:

 <DataGrid Name="grdData">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding name}" />
            <DataGridTextColumn Header="Symbol" Binding="{Binding symbol}"/>
            <DataGridTextColumn Header="High" Binding="{Binding high}" />
            <DataGridTextColumn Header="Low" Binding="{Binding low}" />
        </DataGrid.Columns>
 </DataGrid>

Также я использую grdData.ItemsSource = rootObject.QUOTE.ToList (); для заполнения данных в gridview. Итак, как мне получить значения open, high, low и last из сессии в DataGrid?

Пожалуйста, помогите решить эту проблему.

1 Ответ

0 голосов
/ 15 ноября 2018

Поскольку свойство SESSION является списком, вам нужно либо использовать другой элемент управления коллекцией, например, ItemsControl, в DataGridTemplateColumn или привязка к определенному элементу в списке. Переходя от последнего, из комментариев, у меня есть окно теста следующим образом:

XAML:

<Window x:Class="TestWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:CoSecApp_v3"
    mc:Ignorable="d"
    Title="TestWindow" Height="450" Width="800">
<Grid>
    <DataGrid Name="grdData" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding name}" />
            <DataGridTextColumn Header="Symbol" Binding="{Binding symbol}"/>
            <DataGridTextColumn Header="High" Binding="{Binding Path=SESSION[0].high}" />
            <DataGridTextColumn Header="Low" Binding="{Binding Path=SESSION[0].low}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>

Код сзади:

public class TestWindow
{
private void TestWindow_Loaded(object sender, RoutedEventArgs e)
{
    RootObject DC = new RootObject();
    DC.QUOTE = new List<QUOTE>();
    for (int I = 1; I <= 10; I++)
    {
        DC.QUOTE.Add(new QUOTE() { name = "Name" + I, symbol = I, SESSION = new List<SESSION>() });
        DC.QUOTE[I - 1].SESSION.Add(new SESSION() { open = "open", high = "100", low = "10", last = "final" });
    }
    grdData.ItemsSource = DC.QUOTE.ToList();
}

public class SESSION
{
    public string open { get; set; }
    public string high { get; set; }
    public string low { get; set; }
    public string last { get; set; }
}

public class QUOTE
{
    public string symbol { get; set; }
    public string name { get; set; }
    public List<SESSION> SESSION { get; set; }
}

public class RootObject
{
    public List<QUOTE> QUOTE { get; set; }
}
}

Это заполняет мою сетку тестовыми данными, как и ожидалось.

(Кстати, не думайте, что .ToList необходим для DC.QUOTE.ToList(), поскольку это уже объект List.)

...