C# 清除代码隐藏中FrameworkElement中的绑定

C# 清除代码隐藏中FrameworkElement中的绑定,c#,wpf,code-behind,C#,Wpf,Code Behind,背景 我正在创建一个新控件,该控件继承自包装绑定的TextBox。基本上,您可以创建一个TextBox,它有一个ValidationRule,而无需XAML中所需的额外代码。因此,不是: <TextBox> <TextBox.Text> <Binding Path="DisplayWidth" Converter="{StaticResource DistanceUnitConverter}">

背景

我正在创建一个新控件,该控件继承自包装
绑定的
TextBox
。基本上,您可以创建一个
TextBox
,它有一个
ValidationRule
,而无需XAML中所需的额外代码。因此,不是:

<TextBox>
    <TextBox.Text>
        <Binding Path="DisplayWidth"
                 Converter="{StaticResource DistanceUnitConverter}">
            <Binding.ValidationRules>
                <valid:DoubleValidationRule/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

我想知道调用
SetBinding
是否会在
TextProperty
上创建三个
Binding
,或者因为它们都是对
Binding
的相同引用,我不必调用
SetBinding
三次?另外,如果
BindingPath
属性已更改(因此
Binding
现在指向其他地方,我是否需要在再次重置之前“注销”以前的绑定?如果需要,如何执行?我在文档中找不到任何听起来正确的内容。

您要查找的是:

还可以看看这个:


您要找的是:

还可以看看这个:


BindingOperations.ClearBinding(yourTextBox,TextBlock.TextProperty);BindingOperations.ClearBinding(yourTextBox,TextBlock.TextProperty)

<ctrls:ValidateConvertTextBox BindingPath="DisplayWidth"
                              ValidationRule="{StaticResource DoubleValidationRule}"
                              ValueConverter="{StaticResource DistanceUnitConverter}"/>
 <Binding Path="{TemplateBinding Path}">
     ...
 </Binding>
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 );
    }
}
BindingOperations.ClearBinding(myText, TextBlock.TextProperty);