【问题标题】:"Transfer" a binding from a property to an other将绑定从一个属性“转移”到另一个
【发布时间】:2025-11-24 01:45:02
【问题描述】:

我正在尝试将TextBox 包装在自定义UserControl 中,然后我的自定义UserControl 具有Text 依赖属性。使用自定义 UserControl 的示例如下所示:

<MyTextBoxWrapper Text="{Binding SomeProperty}"/>

MyTextBoxWrapper 看起来像这样:

<UserControl ...>
    <TextBox x:Name="wrappedTextBox"/>
</UserControl>

我希望我的包装器能够像这样编写:

<UserControl ...>
    <TextBox x:Name="wrappedTextBox" Text="{Binding SomeProperty}"/>
</UserControl>

我的问题是我无法将绑定从MyTextBoxWrapper.Text 属性“转移”到TextBox.Text 属性。 (有点像绑定绑定本身)

我只设法获得MyTextBoxWrapper.Text使用的绑定:

myTextBoxWrapperInstance.GetBindingExpression(MyTextBoxWrapper.TextProperty);

如何让两个属性使用相同的绑定?我不一定需要相同的绑定实例,但我至少需要从MyTextBoxWrapper.Text 使用的绑定创建TextBox.Text 使用的绑定。

【问题讨论】:

    标签: c# wpf xaml data-binding


    【解决方案1】:

    UserControl 中的TextBox 绑定到UserControl 本身的Text 属性:

    <TextBox x:Name="wrappedTextBox"
        Text="{Binding Text, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
    

    这不符合我的需要,我需要将 TextBox.Text 上的绑定与 MyTextBoxWrapper.Text 上的绑定相同,您给我的绑定会创建不同的绑定

    是的,单个绑定始终具有单个目标和单个源。

    您可以尝试为UserControl 的自定义Text 属性注册回调,并以编程方式将TextBoxText 属性绑定到同一属性。

    或者将Text 设为Binding 类型的属性。

    【讨论】:

    • 这不符合我的需要,我需要将TextBox.Text 上的绑定与MyTextBoxWrapper.Text 上的绑定相同,您给我的绑定会创建不同的绑定
    • 当然它会创建一个新的绑定。单个绑定具有单个目标和单个源,“共享”它是没有意义的。
    • 我需要将TextBox.Text 直接绑定到MyTextBoxWrapper.Text 绑定的属性
    • @nalka:这在 XAML 中是不可能的。那么自定义的Text 属性是什么?
    • 我从来没有提到我只需要 XAML 的解决方案,我什至提到我找到了一种方法来获取用于 C# 中 MyTextBoxWrapper.Text 的绑定实例
    最近更新 更多