因此,我有一個運行查詢並返回JSON響應的api調用。由於JSON響應的結構,我創建了一個可以使用Json.Net反序列化返回的類。下面是示例類:將數據網格綁定到具有嵌套類的對象
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,我想綁定到Name屬性列標題,並從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,我試着在XAML的ListBox中設置DataGrid,但是我可能沒有正確實現它,最後來到試圖創建DataGrids列表然後綁定到這些列表的解決方案。
我可以使用一些幫助。
謝謝!