参考https://www.cnblogs.com/KeithWang/archive/2012/03/29/2423005.html
https://www.cnblogs.com/xieyong_198510/p/3437217.html
第一章、TemplateBinding定义
TemplateBinding是为了某个特定场景优化出来的数据绑定版本--需要把ControlTemplate里面的某个Property绑定到应用该ControlTemplate的控件的对应Property上。
中文表达比较拗口,MSDN的原文“Links the value of a property in a control template to be the value of a property on the templated control.”
第二章、TemplateBinding用法
在属性赋值中直接的用法: <object property="{TemplateBinding targetProperty}" .../> 在模板或样式中用Setter属性的用法: <Setter Property="propertyName" Value="{TemplateBinding targetProperty}" .../>
第三章、TemplateBinding和Binding区别
- Binding比TemplateBinding更加灵活强大,但是开销也更大。TemplateBinding在使用场景有限制,但是效率较高。Template非常类似{Binding RelativeSource={RelativeSource TemplatedParent}}构造的Binding。
- TemplateBinding同样允许我们定义Converter和ConverterParameter,在一定程度上加强了TemplateBinding的应用功能和范围.
- 最重要的区别:TemplateBinding仅仅支持单向的数据绑定,从应用Template的控件到Template(from templated control to template)。如果我们需要反向或者双向的绑定,唯一的选择就是应用Binding和RelativeSource。
使用时如何选择:
如果我们需要一个单向的绑定,使数据从应用template的控件(templated parent)到template,我们就该使用高效而简单的TemplateBinding,其他情况下都使用Binding
第四章、结论
讨论了区别,最终我们需要的是一个结论,到底什么时候用哪种Binding?
如果我们需要一个单向的绑定,使数据从应用template的控件(templated parent)到template,我们就该使用高效而简单的TemplateBinding,其他情况下都使用Binding。
https://blog.csdn.net/nodeman/article/details/80605881
TemplateBinding是单方向的,即数据源到目标的方向
当数据源的类型和目标的类型不一致时,TemplateBinding需要自己写转换器来完成。
TemplateBinding与Binding区别
(1)TemplateBinding只是单方向的数据绑定
(2)TemplateBinding不会自动转换数据类型
下面两个绑定效果是一样的
<TextBlock Text="{TemplateBinding MyText}"/>
<TextBlock Text="{Binding Path=MyText, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"/>
RelativeSource={RelativeSource TemplatedParent}——
TemplateBinding是连接控件和模板中属性的一种绑定,从自定义控件的属性中提取属数据。
优点:轻量,开销比较小。
缺点:只能单向绑定,不能绑定到继承Freezable的类上。