2013-03-05 3 views
4

DataGridTextColumn에서 DataGrid 셀의 바인딩 식에 액세스해야합니다. 예를 들어 :WPF DataGrid : 셀 바인딩 표현식을 얻는 방법?

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

그리고 세포가 올 것 같다 :

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

나는 셀과 관련된 TextBlock을 얻을 수 있었다. 전화 할 수 있습니다

 cell.SetValue(TextBlock.TextProperty, value); 

셀 텍스트를 업데이트하려면 다음을 수행하십시오. 그리드에서 작동하는 것 같습니다 (숫자가 업데이트 됨). 그러나 잠시 후 깨닫게되면 소스가 업데이트되지 않습니다. UpdateSourceTrigger를 PropertyChange로 설정하더라도 도움이되지 않습니다. 그런 다음 바인딩 식을 가져와 UpdateSource를 명시 적으로 호출해야한다고 생각했습니다.

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

하지만 bindingExpr은 항상 null입니다. 왜?

편집 : 내가 가진 원래의 문제는 셀의 바인딩 TextBlock에 도달하여 TextBlock.TextProperty를 설정할 수 있다는 것입니다. 그러나 소스가 업데이트되지 않습니다. 이것은 내가이 문제를 해결하기 위해 노력하고있는 것입니다.

+0

안녕하세요, 문제를 해결하셨습니까? –

+0

열의 SortMemberPath에는 기본적으로 바인딩 경로 (바인딩 된 속성별로 정렬 할 수 있도록하는 기본 속성 값)가 포함됩니다. 바인딩 경로를 가져 오는 신뢰할 수없고 의도 된 방법은 아니며 여러 바인딩이나 수동으로 SortMemberPath가 작동하지 않습니다 세트. – kiran

답변

5

DataGridTextColumnTextBox에는 바인딩 표현이 없으므로 열 자체에 바인딩이 있습니다.

DataGridTextColumn는 그러나 Binding 속성이 그래서 당신은 일반 공용 속성을 사용하여 액세스해야하는 DependancyProperty 아니다하는 BindingBase 속성이 아닙니다 TextBlock.TextProperty을 사용 DataGridBoundColumn에서 파생됩니다.

따라서 Binding 속성이 DataGridTextColumn 인 경우 BindingBase이므로 약간의 캐스팅을해야합니다. 이런

뭔가 (안된)

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

빠른 응답을 보내 주셔서 감사합니다. 당신의 코드는 칼럼의 바인딩에 나를 데려다 준다. 그러나 그것은 내 문제를 해결하지 못합니다. 셀에 대해 bindingExpression을 얻으려면 어떻게해야합니까? 요점은 BindingExpression.UpdateSource()를 호출하는 것입니다. TextBlock.Text를 설정하면 소스가 업데이트되지 않기 때문입니다. – newman

+0

DataGridBoundColumn에 캐스팅 열을위한 1 개 및 oops! 나에게 :) –

-1

있는 TextBox t = e.EditingElement 텍스트 상자로서 작동한다; 문자열 b = t.GetBindingExpression (TextBox.TextProperty) .ResolvedSourcePropertyName;