WPF DataGrid:如何获取单元格的绑定表达式?

时间:2013-03-05 05:17:04

标签: wpf binding datagrid

我需要访问DataGridTextColumn中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始终为null。为什么呢?

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

3 个答案:

答案 0 :(得分:5)

TextBox中的DataGridTextColumn将没有列本身具有绑定的绑定表达式。

DataGridTextColumn派生自DataGridBoundColumn使用BindingBase属性而不是TextBlock.TextProperty,但Binding属性不是DependancyProperty,所以你必须使用普通的公共属性访问。

因此,Binding中的DataGridTextColumn属性为BindingBase,因此您必须进行一些转换。

这样的事情应该有效(未经测试)

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

答案 1 :(得分:0)

您需要找到if (pattern) { results = search(pattern); print(results); } else { print(OVERVIEW_TABLE) }

TextBlock

var textBlock = cell.FindVisualChild<TextBlock>(); BindingExpression bindingExpression = textBlock.GetBindingExpression( TextBlock.TextProperty); 的代码:

FindVisualChild()

答案 2 :(得分:-2)

TextBox t = e.EditingElement as TextBox;             string b = t.GetBindingExpression(TextBox.TextProperty).ResolvedSourcePropertyName;