WPF-为继承的列公开绑定方法

WPF-为继承的列公开绑定方法,wpf,vb.net,inheritance,datagridtemplatecolumn,Wpf,Vb.net,Inheritance,Datagridtemplatecolumn,我经常遇到的一个问题是需要为datagrids创建增强的文本列。我的意思是,这些列的行为与普通文本列类似,但具有额外的图形或功能,如文本旁边显示的图像。所以我使用的是模板列,但显然这意味着必须“从头开始”生成普通文本列所需的许多功能,例如文本框编辑模板: <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <TextBox

我经常遇到的一个问题是需要为datagrids创建增强的文本列。我的意思是,这些列的行为与普通文本列类似,但具有额外的图形或功能,如文本旁边显示的图像。所以我使用的是模板列,但显然这意味着必须“从头开始”生成普通文本列所需的许多功能,例如文本框编辑模板:

<DataGridTemplateColumn.CellEditingTemplate>
         <DataTemplate>
              <TextBox 
                   FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" 
                    Text="{Binding Path=[binded text], Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>

不工作,我最好的猜测是我没有设置
绑定.Source
,但我不知道应该将其设置为什么。它变得非常令人沮丧。

因此,如果我理解正确,您希望能够将TextBox的text属性绑定到父控件上的某个内容,该内容将保存您的子控件。你不能使用普通属性(我猜你得到了“不能绑定,因为它不是依赖属性”异常或类似的东西)

我通常就是这样做的,没有任何问题。首先,需要在代码隐藏中定义依赖项属性。应该向你展示如何在VB.net中实现这一点(我在VB.net上真的很烂,所以我不会假装给你任何建议)。检查VB.net中的第一个示例。首先需要将布尔值更改为字符串,您可能还需要更改属性名称。请注意将名称中的“属性”部分保留在示例中的位置
GetType(MyCode)
应更改为实现依赖项属性的类的名称(您的
MyTextColumn
类的名称)

在MyTextColumn xaml中,它应该如下所示:

<DataGridTemplateColumn.CellEditingTemplate>
         <DataTemplate>
              <TextBox 
                   FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" 
                    Text="{Binding Path=IsSpinning, RelativeSource={RelativeSource AncestorType=DataGridTemplateColumn}, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>

我已经把原来的财产名称写在这里了,你应该把你选择的名字写在那里。此外,如果基类不是DataGridTemplateColumn,则可能必须修复相对源。这将拾取任何提交到自定义控件的内容

最后一步是使用您的控件:

<controls:MyTextColumn IsSpinning="{binding PropName}"/>


你可以把它绑定到你想要的任何字符串上。如果您对我的解释或代码有任何疑问,请随时写出来,我会相应地修改我的答案。

对于您的答案尚未回复,我深表歉意。我的手指韧带撕裂,本月无法进行太多的编码:(幸运的是,我将能够在不久的将来检查出这一点。很抱歉,我无法实现这一点。也许您可以发布SPULTE列定义?为了清楚起见,我希望“IsSpining”绑定到每行源对象的属性。
<controls:MyTextColumn IsSpinning="{binding PropName}"/>