我有一个带有CellTemplate的DataGrid,我通过PropertyDescriptors动态创建列。我正在使用这种方法:http://paulstovell.com/blog/dynamic-datagrid列生成有效,正确的内容到达正确的单元格。
我的问题在于我从ex更改提供给单元格的内容。 'string'或'int'到包含多个属性的自定义类。 CellTemplate不会绑定到contentclass中的属性。
内容类:
public class ContentWrapper
{
public Color Color{ get; set; }
public String Text { get; set; }
public String Comment { get; set; }
}
cellTemplate:
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid ToolTip="{Binding Comment}"
Background="{Binding Color, Converter={StaticResource ColorToBrushConverter}}">
<TextBlock Text="{Binding Text}"
VerticalAlignment="Bottom"
HorizontalAlignment="Left"/>
<Polygon Visibility="{Binding Comment, Converter={StaticResource CommentVisibleConverter}, FallbackValue=Hidden}"
HorizontalAlignment="Right"
Points="0,0 6,0 6,6"
VerticalAlignment="Top">
<Polygon.Fill>
<SolidColorBrush Color="Red" />
</Polygon.Fill>
</Polygon>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
如何让CellTemplate能够支持自定义类并绑定到它的属性? 或者有更简单的方法吗?
修改 列生成是这样的:
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var property = e.PropertyDescriptor as Property;
if (property != null)
{
var binding = new Binding() { Path = new PropertyPath(property), Mode = property.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay };
var dataGridBoundColumn = e.Column as DataGridBoundColumn;
if (dataGridBoundColumn != null)
dataGridBoundColumn.Binding = binding;
else
{
var dataGridComboBoxColumn = e.Column as DataGridComboBoxColumn;
if (dataGridComboBoxColumn != null)
dataGridComboBoxColumn.SelectedItemBinding = binding;
}
}
}
答案 0 :(得分:1)
为解决问题做得好。
我不是试图回答你的问题,只是简单地提出一些建议:
你似乎从Bind
内部尝试DataGrid ControlTemplate
到您的数据实例属性......这不是真正的用途。 Template
属性允许我们定义控件的外观。您应该将商品Style
和数据Binding
放在定义数据项呈现方式的ItemsTemplate
中。这是一个重要的区别。
来自MSDN:
ItemsTemplate属性 - 获取或设置用于显示每个项目的DataTemplate。
Template Property - 获取或设置控件模板。 ControlTemplate指定Control
的外观
答案 1 :(得分:0)
D'oh ..在这个问题上工作了2天,并且在我问到解决问题后1小时。
我将Column类型更改为嵌套类型的DataGridTemplateColumn,并手动加载单元格模板和绑定。