背景
我正在创建一个继承自TextBox包装的新控件Binding。基本上这样你就可以创建一个没有 XAML 中所需的额外代码TextBox的单一代码。ValidationRule所以而不是:
<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。
问题
在后面的代码中,当我尝试创建这个新的绑定时,我在 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三次?此外,如果BindingPath属性已更改(所以Binding现在指向其他地方,我是否需要在再次重置之前“取消注册”先前的绑定?如果是这样,该怎么做。我在文档中找不到任何听起来正确的东西。