Поведение 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()
для ContainedObject
, поскольку WPF по умолчанию напишет метод .ToString()
любого класса, который он не знает, как рисовать в пользовательском интерфейсе.
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);
}
}