背景
我正在创建一个新的控件,它继承自TextBox
包裹Binding
。基本上,您可以创建一个TextBox
只有ValidationRule
而没有XAML中所需的额外代码。所以而不是:
<TextBox>
<TextBox.Text>
<Binding Path="DisplayWidth"
Converter="{StaticResource DistanceUnitConverter}">
<Binding.ValidationRules>
<valid:DoubleValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
它将简化为:
<ctrls:ValidateConvertTextBox BindingPath="DisplayWidth"
ValidationRule="{StaticResource DoubleValidationRule}"
ValueConverter="{StaticResource DistanceUnitConverter}"/>
之所以这样,是因为我有很多这样的地方,我不能创建一个使用类似的东西的模板:
<Binding Path="{TemplateBinding Path}">
...
</Binding>
因为Path不是DependencyProperty。
问题
在后面的代码中,当我尝试创建这个新的Binding时,我在XAML中显示了上面显示的3个依赖项属性,如下所示:
private void SetBindingPath( string value )
{
if( string.IsNullOrWhiteSpace( value ) ) return;
Binding = new Binding( value );
SetBinding( TextProperty, Binding );
}
private void SetValidationRule( ValidationRule value )
{
if( Binding != null )
{
Binding.ValidationRules.Clear();
Binding.ValidationRules.Add( value );
SetBinding( TextProperty, Binding );
}
}
private void SetValueConverter( IValueConverter value )
{
if( Binding != null )
{
Binding.Converter = value;
SetBinding( TextProperty, Binding );
}
}
我想知道调用SetBinding
是否会在Bindings
上创建三个TextProperty
,或者因为它们都与Binding
相同,所以我不必致电SetBinding
{1}}三次?此外,如果BindingPath
属性已更改(所以Binding
现在指向其他位置,我是否需要“重新注册”之前的绑定才能再次重置?如果是这样,该怎么做。我无法'找到文档中听起来正确的任何内容。
答案 0 :(得分:4)
你要找的是:
http://msdn.microsoft.com/en-us/library/ms748951.aspx
BindingOperations.ClearBinding(myText, TextBlock.TextProperty);
另请看一下:
http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.clearallbindings.aspx
答案 1 :(得分:0)
BindingOperations.ClearBinding(yourTextBox,TextBlock.TextProperty);