如何显示从绑定到对象列表的数据网格中选择的列?



我有一个数据网格来显示我从API服务抓取的数据集。目前,数据网格显示整个数据集。但是,我只希望显示选定的列。设置AutoGenerateColumns ="False"选项,然后添加要显示的列,给出以下错误"System。InvalidOperationException: '在使用ItemsSource之前Items集合必须为空。'"因为在我运行程序之前,集合应该还不存在。我也不希望隐藏或删除数据集中的列。我用什么方法来显示那些想要的列呢?

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,然后相应地样式listview模板

不能直接向DataGrid添加列。你必须把它们添加到DataGrid。列属性:

<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>

最新更新