2010-12-10 5 views
0

도메인 개체의 속성이 WPF 요소에 바인딩되어 있는지 여부를 확인하는 간단한 방법이 있습니까? 그렇다면 어떤 요소와 속성이 필요합니까?WPF : 바인딩 도메인 개체 찾기 속성

예를 들어 TextBox가있는 UserControl이 있고 컨트롤의 "Text"속성을 내 도메인 개체의 "Description"속성에 바인딩한다고 가정 해 보겠습니다. 도메인 개체 속성 ("설명")의 이름 만 주어진다면 해당 속성에 대한 BindingExpression은 어떻게 검색합니까?

+0

도메인 개체의 컨텍스트 또는 사용자 정의 컨트롤의 컨텍스트에서? –

답변

1

아니요,이 작업을 수행하는 간단한 방법은 없습니다. 바인딩이 작동하지 않으면 속성을 여러 요소의 여러 종속성 속성에 바인딩 할 수 있습니다. 기본적으로 VisualTree를 탐색하고 각 FrameworkElement에 대한 Dependency Properties를 열거하고 BindingExpressions를 가져 와서 Binding Path를 비교하여 검색중인 속성 이름과 일치하는지 확인해야합니다. 또한 DataContext와 개체를 비교해야합니다. 나는 이것이 실패 할 많은 상황을 생각할 수있다. 경로가 항상 바인딩에서 사용되는 것은 아니며 DataContext를 직접 사용할 수 있습니다.

어쨌든 여기 실제로는 이것을 수행하는 link 구현이 있습니다. 시도해 보았지만 작동했지만 4 열 10 행을 포함하는 DataGrid로 검색을 완료하는 데 약 2 초가 걸렸습니다. DataContext 검사를하지는 않지만 내 테스트 응용 프로그램에 추가했지만 코드를 게시하지 않을 것입니다. 사용자가이 코드를 사용할 것이라고 생각하지 않기 때문입니다. 어쨌든 그것을 원한다면 알려주세요. 나는 그것을 게시 할 것입니다.

+0

나는 이것이 유일한 선택이 아니길 바랐다. 최소한 FrameworkElement.GetLocalValues를 사용하여 값이 설정된 속성 만 검색하여 프로세스 속도를 향상시킬 수는 있지만 특히 효과적이지는 않습니다. –

+0

@ Martin Robins : 나도 비슷한 것을 필요로했다. 더 나은 (또는 심지어 최적화 된) 방법을 찾으면 업데이트해야합니다. –

관련 문제