WPF에서는 Binding과 마찬가지로 TemplateBinding이 동작하지 않는 이유는 무엇입니까?
좋아... 머리 긁히는 것 같아2개의 WPF 컨트롤이 있습니다.하나는 사용자 컨트롤이고 다른 하나는 커스텀 컨트롤입니다.User Foo와 Custom Foo라고 부릅니다.Custom Foo용 컨트롤 템플릿에서는 User Foo 인스턴스를 사용하고 있습니다.User Foo는 이름 있는 부품이기 때문에 템플릿 적용 후 접근할 수 있습니다.잘 먹히네요.
현재 UserFoo와 CustomFoo 모두Text
정의된 속성(즉, AddOwner를 사용하는 공유 DP가 아님)입니다.Don't quest...) 둘 다 이렇게 선언되어 있습니다.
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text",
typeof(string),
typeof(UserFoo), // The other is CustomFoo
new FrameworkPropertyMetadata(
null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
null,
null,
true,
UpdateSourceTrigger.PropertyChanged
)
);
특히 모드가 TwoWay로 설정되고 UpdateSourceTrigger가 PropertyChanged로 설정된다는 점에 유의하십시오.
Custom Foo 스타일템플릿에서 Custom Foo의 Text 속성을 내부 User Foo의 Text 속성에 소스로서 바인드합니다.보통 이건 쉬워요.UserFoo의 텍스트 속성을 "{TemplateBinding Text}"로 설정했을 뿐인데, 어떤 이유로 인해 UserFoo가 CustomFoo에서 올바르게 설정되었지만 그 반대는 설정되지 않았습니다. 다시 말하지만 두 DP는 모두 양방향으로 설정됩니다!단, 템플릿바인딩이 아닌 상대 소스바인딩을 사용하는 경우에는 매우 효과적입니다.어... 뭐야?
// This one works
Text="{Binding Text, RelativeSource={RelativeSource AncestorType={local:CustomFoo}}, Mode=TwoWay}"
// As does this too...
Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
// But not this one!
Text="{TemplateBinding Text}"
그래서 무슨 일이야?제가 무엇을 빠뜨리고 있나요?
MSDN에서 다음 포럼 투고를 찾았습니다.http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/0bb3858c-30d6-4c3d-93bd-35ad0bb36bb4/
다음과 같이 되어 있습니다.
TemplateBinding은 템플릿시나리오용으로 최적화된 형식의 바인딩으로,
{Binding RelativeSource={RelativeSource TemplatedParent}}
OP 메모: 매뉴얼에 기재되어 있는 내용과 달리 실제로는 다음과 같습니다.
{Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}
나는 그 문서들을 고소했고, 그들은 그들이 항상 일방적이라는 문장을 추가했지만, 코드 예제는 여전히 모드를 나열하지 않지만, 없는 것보다는 낫다고 생각한다.)
TemplateBinding은 템플릿에 바인딩된 상위 템플릿에서 속성으로 데이터를 전송합니다.반대 방향 또는 양방향으로 데이터를 전송해야 하는 경우 Mode 특성이 OneWayToSource 또는 TwoWay로 설정된 RelativeSource of TemplatedParent와의 바인딩을 작성합니다.
상세내용 : http://msdn.microsoft.com/en-us/library/ms742882.aspx
Mode=OneWay는 TemplateBinding 사용의 "최적화" 중 하나인 것 같습니다.
TemplateBinding은 양방향 바인딩을 지원하지 않으며 Binding만 지원합니다.BindsTwayBeDefault 옵션을 사용하더라도 양방향 바인딩을 지원하지 않습니다.
자세한 내용은 여기를 참조해 주세요.요약:
단, TemplateBinding은 TemplateBinding을 사용하는 부모에서 요소로 데이터를 전송할 수 있는 방향만 있습니다.데이터를 반대방향 또는 양방향으로 전송해야 할 경우 RelativeSource of TemplatedParent가 유일한 옵션입니다.예를 들어, 템플릿 내에서 TextBox 또는 Slider와 상호 작용하면 양방향 바인딩을 사용하는 경우에만 템플리트 상위 템플릿의 속성이 변경됩니다.
언급URL : https://stackoverflow.com/questions/5913176/in-wpf-why-doesnt-templatebinding-work-where-binding-does
'programing' 카테고리의 다른 글
공식에서 셀의 값을 셀 참조로 사용하는가? (0) | 2023.04.11 |
---|---|
스토리보드의 사용자 지정 셀 행 높이 설정이 응답하지 않습니다. (0) | 2023.04.11 |
SQL Server에서 특정 테이블에 대한 CREATE TABLE 문을 생성하려면 어떻게 해야 합니까? (0) | 2023.04.11 |
패스워드 없이 다른 사용자로 스크립트를 실행하는 방법 (0) | 2023.04.11 |
Excel - FILTERXML을 사용하여 문자열에서 하위 문자열 추출 (0) | 2023.04.11 |