C# 将对象列表动态绑定到DataGrid时的UI问题
当列表绑定到datagrid时,它只显示以下列;包含objectid和Obj 如何在不修改edit:XAML并在ContainedObject本身中为ContainedObject内的每个成员创建属性的情况下,让datagrid显示以下列;包含对象、对象、ID、高度、宽度 我该怎么做才能让Obj返回一个ContainedObject列来实际显示每行单元格中的内容 DataGrid的默认行为是自动生成列,这意味着它将查看对象并为对象上的每个公共属性创建列 要更改此行为,可以将AutoGenerateColumns设置为False,并手动将自己的列添加到DataGrid。这就是我的建议C# 将对象列表动态绑定到DataGrid时的UI问题,c#,wpf,binding,user-interface,datagrid,C#,Wpf,Binding,User Interface,Datagrid,当列表绑定到datagrid时,它只显示以下列;包含objectid和Obj 如何在不修改edit:XAML并在ContainedObject本身中为ContainedObject内的每个成员创建属性的情况下,让datagrid显示以下列;包含对象、对象、ID、高度、宽度 我该怎么做才能让Obj返回一个ContainedObject列来实际显示每行单元格中的内容 DataGrid的默认行为是自动生成列,这意味着它将查看对象并为对象上的每个公共属性创建列 要更改此行为,可以将AutoGenerat
class ContainingObject
{
private ContainedObject objContained;
public int ContainingObjectID { get; set; }
public ContainedObject Obj { get { return objContained; } }
// Methods that initalize contained objects and such <here>
}
class ContainedObject
{
public int ID { get; set; }
public int Height { get; set; }
public int Width { get; set; }
}
// Binding Code
List<ContainingObject> lstContainingObjects = new List<ContainingObject>();
// Code to Populate List <here>
dtgrdTheDataGrid.ItemsSource = lstContainingObjects;
不修改WPF会指定什么?你是说XAML吗?是的,对不起,我就是这个意思。谢谢你的迅速回复。我希望保持自动生成列的默认行为处于启用状态。有没有办法让“DataGrid”从“ContainedObject”中的公共属性生成列?我还将“ContainedObject”重写为String函数,但它在单元格中仍然不显示任何内容。@layern9ne数据网格仅用于直接读取数据对象本身的属性,而不是任何子属性。如果你想要一个不同的行为,你必须覆盖DataGrid来实现你自己的逻辑。谢谢!通过将column.IsReadOnly更改为true,我能够解决在Obj列单元格中看不到任何内容的问题。
<DataGrid x:Name="dtgrdTheDataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ContainingObjectId" Binding="{Binding ContainingObjectID }" />
<DataGridTemplateColumn Header="ContainedObject">
<DataTemplate>
<TextBlock Text="Whatever you want here" />
</DataTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="ContainedObjectId" Binding="{Binding ContainedObject.Id}" />
<DataGridTextColumn Header="Height" Binding="{Binding ContainedObject.Height}" />
<DataGridTextColumn Header="Width" Binding="{Binding ContainedObject.Width}" />
</DataGrid.Columns>
</DataGrid>
class ContainingObject
{
private ContainedObject objContained;
public int ContainingObjectID { get; set; }
public ContainedObject Obj { get { return objContained; } }
// Of course, you should include a check for if objContained is null
public int ContainedObjectId { get { return objContained.Id; } }
public int ContainedObjectHeight { get { return objContained.Height; } }
public int ContainedObjectWidth { get { return objContained.Width; } }
}
class ContainedObject
{
public int ID { get; set; }
public int Height { get; set; }
public int Width { get; set; }
public override ToString()
{
// Return whatever you want here
return string.format("Contained object: {0}", ID);
}
}