2013-03-05 119 views
4

我需要访问DataGridTextColumn中的DataGrid单元格的绑定表达式。例如:WPF DataGrid:如何获取单元格的绑定表达式?

 <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 

我设法与细胞相关的TextBlock的:

 var cell = dataGrid.GetCellCtrl<TextBlock>(dataGrid.CurrentCell); 

和细胞似乎是正确的。我可以致电

 cell.SetValue(TextBlock.TextProperty, value); 

更新单元格文本。它似乎在网格上工作(数字更新)。但是,正如我在一段时间后意识到的,源代码不会被更新。即使我将UpdateSourceTrigger设置为PropertyChange,它也没有帮助。然后,我想我需要获得绑定表达式并明确地调用UpdateSource。

 var bindingExpr = cell.GetBindingExpression(TextBlock.TextProperty); 

但bindingExpr始终为空。为什么?

编辑: 我原来的问题是,我可以到达单元格的绑定TextBlock,并设置TextBlock.TextProperty。但是,源不会更新。这是我试图解决这个问题。

+0

嗨,你解决了这个问题吗? – 2014-02-10 09:40:19

+0

该列的SortMemberPath将默认包含绑定路径(这是默认属性值,可通过绑定属性进行排序)。它不可靠并且无法获取绑定路径,并且不适用于多个绑定,或者当手动排序路径时组。 – kiran 2014-08-25 12:08:32

回答

5

TextBoxDataGridTextColumn将不具有绑定表达式列本身具有绑定。

DataGridTextColumnDataGridBoundColumn它采用了BindingBase财产不TextBlock.TextProperty得出,然而,Binding属性不是DependancyProperty所以你将不得不使用正常的公共属性来访问。

所以你将不得不做一点铸造Binding属性DataGridTextColumnBindingBase类型。

像这样,就可以(未测试的)

var binding = (yourGrid.Columns[0] as DataGridBoundColumn).Binding as Binding; 
+2

感谢您的快速响应。你的代码确实让我看到了列的绑定。但是,它不能解决我的问题。我如何获得单元格的bindingExpression?整点是调用BindingExpression.UpdateSource(),因为如果我设置TextBlock.Text,源不会更新。 – newman 2013-03-05 13:20:15

+0

1将数据列投射到DataGridBoundColumn并且发出哎呀!对我来说 :) – 2013-09-26 19:35:24

-1

文本框吨= e.EditingElement作为文本框; string b = t.GetBindingExpression(TextBox.TextProperty).ResolvedSourcePropertyName;

相关问题