2010-05-05 4 views
0

나는 코드 뒤에 DependencyPropertyAppChrome라고 (UserControl에서 파생 된) 연관된 ApplicationChrome XAML 개체에 대한 참조를 저장 년대에이 이는 XAML 개체 (Window에서 파생 된) ChromeWindow라는이 . ApplicationChrome의 XAML 파일에는 의 XAML에서 바인딩하려는 x:Name 개의 개체 (예 : TextBlock 및 Border)가 있습니다. ChromeWindow의 루트는 x:Name '는 XAML에서 rootWindow 같은 거라고, 그래서 나는 이러한 바인딩 중 하나 일 것이라고 생각 :XAML 멀티 레벨 바인딩 소스/경로 문제

{Binding ElementName=rootWindow, Path=AppChrome.CaptionTextBlock.Text, Mode=OneWay} 

을하지만은 BindingExpression 경로 오류 등 그 재산의 불평'이다 CaptionTextBlock '(는 x : 아직

{Binding Source=AppChrome.CaptionTextBlock, Path=Text, Mode=OneWay} 

그리고 행운을하는이 시간에 불만을 :

그래서 내가 intead 바인딩이 시도 ApplicationChrome AppChrome의 XAML에서 Name'd TextBlock의)는 유형의 객체를 찾을 수 없습니다 그들을 위해 노출 종속성 속성이없는 한 BindingExpression 경로 오류 다시, 그러나 당신이 그 요소를 명명했다하더라도 유형 String

+0

'솔루션'(그리고 저는이 용어를 매우 느슨하게 사용합니다)은 AppChrome의 각 XAML 요소에 대해 DP를 만들고 바인딩 경로를 통해 액세스하려고했는데 AppChrome의 Loaded() 메서드에서 DP를 적절한 요소를 이름으로 XAML 마크 업 (Markup)이 이것보다 더 똑똑해야합니다. 닷넷 3.5 SP1 – tpartee

+0

Aaaand에서 그렇게 잘 작동하는 것을 상기합니다. 바인딩은 소스 속성에서 업데이트 알림을받지 못합니다. 굉장한. – tpartee

+0

이것은 .NET 3.5 또는 다른 버전에서는 작동하지 않습니다. – Charlie

답변

0

의 개체에 CaptionTextBlock 속성을 찾을 수없는이 시간, 그들은 바인딩을 사용할 수 없습니다.

ApplicationChrome이 바인딩이 작동하려면 CaptionTextBlock이라는 종속성 속성이 필요합니다.

왜 이러한 개체에 바인딩하려고하는지 설명 할 수 있으므로 시나리오를 더 잘 이해할 수 있습니다. 이런 종류의 바인딩은 지저분하지 않고 오히려 특이한 것이기 때문에 아마 그것을하는 더 좋은 방법이있을 것입니다.

+0

나는 그들 자신을 묶는 것이 아니라 최종 목적지로서의 그들의 속성에 이르는 길을 가고있다. DPs가 자신의 소유물에도 구속력이 있어야합니까? 그렇다면 x : Name의 XAML 요소를 액세스 할 DP로 변환하는 쉬운 방법이 있습니까? – tpartee

+0

예하지만 WPF는 AppChrome에 CaptionTextBlock이 있다는 것을 어떻게 알고 있습니까? AppChrome은 일종의 시각적 트리가있는 일종의 UserControl이라는 것만 알면됩니다. 내부에 요소를 명명 한 비주얼 트리가 있지만 WPF에는 그 존재를 전혀 알 수 없습니다. 그것은 당신의 클래스에 드러난 의존성 프로퍼티에 대해 알고 있지만 그것은 그것이 알고있는 전부입니다. 아니요, 쉬운 방법은 없습니다. 어쩌면 당신은이 바인딩을 통해 성취하고자하는 것을 설명 할 수 있습니다. – Charlie

+0

WPF는 요소가 부분 클래스 정의의 한 부분 인 XAML에 있기 때문에 요소가 있다는 것을 알고 있어야하고 x : Name의 요소는이 때문에 클래스의 멤버가됩니다. IntelliSense에서 알아낼 수 있다면 사전 컴파일러, 컴파일러 및 링커가 없어야하는 이유는 없습니다. 어쨌든이 코드는 Bindings의 XAML Markup Extension 경로 파서와 더 비슷하게 보입니다. 이전 버전의 코드를 보면 .Net 3.5 SP1이 가능하지만 .NET 4.0에서는 질식합니다. – tpartee