WPF如何为DataTemplate编写通用绑定实现多GridColumn复用
实现方案
你可以直接复用DevExpress GridControl单元格上下文的内置属性实现通用模板,无需复杂的自定义逻辑:
- 定义唯一的通用
DataTemplate
<DataTemplate x:Key="CommonGridCell"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <dxe:TextEdit EditValue="{Binding Value.NewValue}" Style="{StaticResource PartStyle}" /> <dxe:TextEdit EditValue="{Binding Value.OldValue}" Style="{StaticResource PartStyle}" /> </StackPanel> </DataTemplate>
- 所有GridColumn统一引用这个模板即可
<Grid > <dxg:GridControl ItemsSource="{Binding DataGridModels}" > <dxg:GridColumn x:Name="UnitCol" FieldName="Unit" CellTemplate="{StaticResource CommonGridCell}"/> <dxg:GridColumn x:Name="PreCol" FieldName="Pre" CellTemplate="{StaticResource CommonGridCell}"/> <dxg:GridColumn x:Name="ExCCol" FieldName="Execution" CellTemplate="{StaticResource CommonGridCell}"/> </dxg:GridControl> </Grid>
原理说明
DevExpress GridControl的CellTemplate默认数据上下文是GridCellData类型对象,其中Value属性会自动对应当前列FieldName指向的行属性值,你设置的FieldName是Unit时,Value就等于Row.Unit,以此类推,因此直接绑定Value下的NewValue和OldValue就能适配所有对应结构的列。
如果你的行对象是没有显式属性的动态类型,还可以用索引器写法适配:
<DataTemplate x:Key="CommonGridCell"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <dxe:TextEdit EditValue="{Binding Row[Column.FieldName].NewValue}" Style="{StaticResource PartStyle}" /> <dxe:TextEdit EditValue="{Binding Row[Column.FieldName].OldValue}" Style="{StaticResource PartStyle}" /> </StackPanel> </DataTemplate>
内容的提问来源于stack exchange,提问作者Aziz Alzayed
相关产品推荐
相关产品推荐

