Итак, у меня есть вызов api, который запускает запрос и возвращает ответ JSON. Из-за структуры ответа JSON я создал класс, который я могу использовать Json.Net для десериализации возврата прямо в. Вот пример класс:Данные привязки DataGrid к объекту с вложенными классами
public class QuerySet
{
public List<Column> Columns { get; set; }
public class Column
{
public List<string> Name { get; set; }
}
public List<RowSet> Rows { get; set; }
public class RowSet
{
public List<DataSet> Row { get; set; }
public class DataSet
{
public List<string> Data { get; set; }
}
}
}
Теперь один вызов API может содержать несколько наборов запросов, поэтому для каждого возвращения, сгенерировать список наборов запросов, что я тогда хочу данные привязать DataGrid к каждому набору , Вот пример того, что я до сих пор в коде позади моего окна:
public List<DataGrid> QueryResults;
public QueryResultsWindow(string _name, JObject _returns)
{
InitializeComponent();
QueryNameText.Text = _name;
QueryResults = new List<DataGrid>();
JArray sets = (JArray)_returns.SelectToken("$..Set");
foreach(JObject set in sets)
{
DataGrid dg = new DataGrid();
QuerySet s = new QuerySet();
s = JsonConvert.DeserializeObject<QuerySet>(set.ToString());
dg.ItemsSource = s.Rows;
QueryResults.Add(dg);
}
ResultsListBox.ItemsSource = QueryResults;
}
Вопрос здесь, как вы можете видеть, что для каждого конкретного DataGrid, я хочу, чтобы заголовки столбцов, связанные с собственностью Имя и данные, заполненные данными Data.
Вот как я в настоящее время настройки XAML в окне:
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" VerticalAlignment="Top">
<TextBlock x:Name="QueryNameText" Margin="5"></TextBlock>
<Button Content="Export Results" Click="Button_Click" Margin="5"></Button>
</StackPanel>
<ListBox DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="3" Name="ResultsListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}" CanUserAddRows="False" IsReadOnly="True" SelectionUnit="Cell">
<DataGrid.Columns>
<DataGridTextColumn Header="{Binding Name}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
Я знаю, что если я хочу, чтобы создать пользовательский класс для каждого возможного типа возвращаемого значения, это было бы гораздо проще. Однако, учитывая сотни потенциальных типов возвращаемых данных, это не представляется возможным. Я пробовал использовать DataTables, я попытался установить DataGrid в ListBox в XAML, но я, возможно, не реализовал это правильно и, наконец, пришел к решению попытаться создать список DataGrids, а затем привязаться к ним.
Я мог бы воспользоваться помощью.
Спасибо!