У меня есть сетка данных для отображения набора данных, который я получаю из службы API. В настоящее время сетка данных отображает весь набор данных. Однако я хочу отображать только выбранные столбцы. Параметр Параметр AutoGenerateColumns = "False", а затем добавление столбцов для отображения дает следующую ошибку "System.InvalidOperationException: "Коллекция элементов должна быть пустой перед использованием ItemsSource" из-за того, что коллекция еще не должна существовать, прежде чем я запущу программу. Я также не хочу скрывать или удалять столбцы из набора данных. Какой метод я использую для отображения этих желаемых столбцов.
XAML
<DataGrid ItemsSource = "{Binding Dataset}" AutoGenerateColumns = "False" >
<DataGridTextColumn Header = "A"
Binding = "{Binding a}"/>
<DataGridTextColumn Header = "B"
Binding = "{Binding b}"/>
<DataGridTextColumn Header = "D"
Binding = "{Binding d}"/>
</DataGrid>
где набор данных:
var Dataset = await_apiDataService.GetDataSet();
if (Dataset != null)
{
Dataset.Clear();
foreach (var item in Dataset)
{
Dataset.Add(item);
}
Вы можете создать отдельный класс именно с теми полями, которые хотите отобразить
var response = await_apiDataService.GetDataSet();
if (response != null)
{
var dataVMs = response.Select(t=> new DataViewModel{ }).ToList();
Dataset.Clear();
Dataset.AddRange(dataVMs);
}
class DataViewModel
{
//Add fields here
}
Или вы можете изменить свой xaml, чтобы использовать ListView
вместо DataGrid
, а затем соответствующим образом оформить шаблон списка.
вы не можете добавлять столбцы непосредственно в DataGrid. вы должны добавить их в свойство DataGrid.Columns:
<DataGrid ItemsSource = "{Binding Dataset}" AutoGenerateColumns = "False" >
<DataGrid.Columns>
<DataGridTextColumn Header = "A" Binding = "{Binding a}"/>
<DataGridTextColumn Header = "B" Binding = "{Binding b}"/>
<DataGridTextColumn Header = "D" Binding = "{Binding d}"/>
<DataGrid.Columns>
</DataGrid>