我遇到的一个反复出现的问题是需要为数据网格创建增强的文本列。我的意思是列的作用就像普通的文本列,但带有额外的图形或功能,比如在文本旁边显示的图像。所以我正在使用模板列,但显然这意味着必须“从头开始”生成许多普通文本列所期望的功能,例如文本框编辑模板:
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
Text="{Binding Path=[binded text], Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>
我想定义一个从 DataGridTemplateColumn 继承的列,然后将所有这些代码转储到其中,这样我就可以在任何我希望的数据网格中重用这些列。但如上所示,我不能在类定义中声明绑定,因为这显然取决于使用情况。
如何定义一个继承的数据网格列,该列使用子控件(在这种情况下特别是单元格编辑文本框),但当在某些实际数据网格中使用 xaml 声明该列时,仍然允许为这些控件设置绑定?
到目前为止,我已经尝试公开一种方法来执行此操作,但它不起作用:
Public Class MyTextColumn
Inherits DataGridTemplateColumn
....
Public Property EditorBinding As String
Get....
Set(value As String)
Dim b As New Binding(value)
b.Mode = BindingMode.TwoWay
b.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus
Dim tb = DirectCast(Me.CellEditingTemplate.LoadContent, TextBox)
tb.SetBinding(TextBox.TextProperty, b)
End Set
End Property
不工作,我最好的猜测是我没有设置Binding.Source
,但我不知道我应该设置它。它变得非常令人沮丧。