在XAML中与孩子的财产绑定

时间:2017-08-27 20:38:46

标签: c# wpf xaml parent-child

我有一个 CellContent 对象,其属性为 Text BackgroundColor 。使用 CellContent 对象,我创建了一个人员列表,其中包含属性 FirstName LastName 。我将此列表绑定到DataGrid。我喜欢做的是根据Brush属性设置背景颜色。

以下代码适用于特定属性 LastName ,但我也想将其设置为 FirstName

<DataGrid x:Name="DG">
     <DataGrid.CellStyle>
         <Style TargetType="{x:Type DataGridCell}">
             <Setter Property="DataGridCell.Background" Value="{Binding LastName.Background}" />
         </Style>
     </DataGrid.CellStyle>
</DataGrid>

所以问题是,如何在XAML中绑定 CellContent 对象的子节点,或者如何用某种通配符替换LastName?

1 个答案:

答案 0 :(得分:0)

我使用AutoGeneratingColumn事件在生成表时分配Background属性。 DataGrid XAML现在看起来像这样:

<DataGrid Name="DG" AutoGeneratingColumn="DG_AutoGeneratingColumn" />           

和背后的代码:

private void DG_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{                        
   DataGridTextColumn textColumn = new DataGridTextColumn();
   textColumn.Header = e.Column.Header;
   textColumn.Binding = new Binding(e.Column.Header.ToString());

   textColumn.CellStyle = new Style();
   textColumn.CellStyle.TargetType = typeof(DataGridCell);
   textColumn.CellStyle.Setters.Add(new Setter(DataGridCell.BackgroundProperty, new Binding(e.Column.Header + ".Background")));

   (sender as DataGrid).Columns.Add(textColumn);

   // Prevent autogenerating the columns
   e.Cancel = true;
}

这当然不是最好的解决方案,但它解决了我的问题。