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;
当列表绑定到datagrid时,它只显示以下列; ContainingObjectID
和Obj
。
如何在不修改(编辑:XAML)并为ContainedObject
本身的ContainingObject
内的每个成员创建属性的情况下,获取数据网格以显示以下列; ContainingObjectID
,Obj
,ID
,Height
,Width
?
如何让Obj
(它返回一个ContainedObject
)列实际显示每行的单元格中的某些内容?
答案 0 :(得分:0)
DataGrid
的默认行为是AutoGenerateColumns,这意味着它将查看您的对象并为该对象上的每个公共属性创建一列。
要更改此行为,您可以设置AutoGenerateColumns="False"
,并手动将自己的列添加到DataGrid。这就是我的建议。
<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>
如果您不想构建自己的列,可以展开ContainingObject
类以包含ContainedObject
属性的公共属性。要在Obj
列中显示其他内容,请覆盖.ToString()
的{{1}}方法,因为默认情况下WPF将编写任何类的ContainedObject
方法,但不知道如何在UI中绘制。
.ToString()