Jus*_*ony 5 .net c# wpf dependency-properties templatebinding
我有一个自定义控件EnhancedTextBox,它是一个具有a TextBox和a 的UserControl Button.对于消费者我希望它看起来大部分看起来像TextBox,所以我做了以下事情:
<UserControl.Template>
<ControlTemplate TargetType="textBoxes:EnhancedTextBox">
...
<TextBox Text="{TemplateBinding Text}"...
Run Code Online (Sandbox Code Playgroud)
在EnhancedTextBox我有
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof (String), typeof (EnhancedTextBox));
public String Text
{
get { return (String) GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
Run Code Online (Sandbox Code Playgroud)
然而,当我使用它时如下:
<EnhancedTextBox Text="{Binding MyText, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}}" />
Run Code Online (Sandbox Code Playgroud)
然后,MyText永远不会更新,我检查EnhancedTextBox.Text,它是null.我错过了什么?我一直盯着这一点,无法弄清楚出了什么问题.我甚至认为可能是因为我使用的是同一个名字,所以创建一个叫做Text1无效的属性....
另外值得注意的是,如果我使用常规TextBox,那么这一切都有效.所以,我相当肯定问题在于EnhancedTextBox它自身
Jus*_*ony 17
我在阅读有关TemplateBinding的MSDN之后想出来了.特别,
TemplateBinding是模板场景的绑定的优化形式,类似于使用{Binding RelativeSource = {RelativeSource TemplatedParent}}构造的Binding.
所以,我决定明确地这样做...这将允许我设置UpdateSourceTrigger(仍然不确定它为什么不默认PropertyChanged)
<TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text, UpdateSourceTrigger=PropertyChanged}"....
Run Code Online (Sandbox Code Playgroud)
而且,现在它正在发挥作用.TemplateBinding甚至没有曝光这些属性....再次,不知道为什么
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |