从其他 Xaml 文件绑定到用户控件中的元素

Posted

技术标签:

【中文标题】从其他 Xaml 文件绑定到用户控件中的元素【英文标题】:Bind to element within Usercontrol from other Xaml file 【发布时间】:2012-11-27 05:11:06 【问题描述】:

谁能告诉我如何绑定到用户控件的元素?

我正在尝试使用数据触发器与 IDataErrorInfo 一起禁用/启用按钮。

所以当元素在同一个视图上时,我通常会这样做

  <Button Name="AddEditButton" Content="Binding ButtonContent" Command="Binding AddCustomerCommand" HorizontalAlignment="Center"  Margin="0 10" >
        <Button.Style>
            <Style TargetType="x:Type Button">
                <Setter Property="IsEnabled" Value="false" />
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="Binding ElementName=CustomerFirstNameTextBox, Path=(Validation.HasError)" Value="false" />
                            <Condition Binding="Binding ElementName=CustomerLastNameTextBox, Path=(Validation.HasError)" Value="false" />
                            <Condition Binding="Binding ElementName=CustomerEmailTextBox, Path=(Validation.HasError)" Value="false" />
                            <Condition Binding="Binding ElementName=CustomerPhoneTextBox, Path=(Validation.HasError)" Value="false" />
                            <Condition Binding="Binding ElementName=CustomerCellphoneTextBox, Path=(Validation.HasError)" Value="false" />

                        </MultiDataTrigger.Conditions>
                        <Setter Property="IsEnabled" Value="true" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

但现在我需要添加一个条件,该条件绑定到我的视图正在使用的 Usercontrol (AdressControl) 上的控件。

我希望像这样轻松访问用户控件的元素

<Condition Binding="Binding ElementName=AddressControl , Path=StreetTextBox.(Validation.HasError)" Value="false"  />

但无济于事。任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

FindAncestor 应该正确解析属性

  <Condition Binding="Binding RelativeSource=RelativeSource FindAncestor, AncestorType=x:Type AddressControl, Path=StreetTextBox.(Validation.HasError)" Value="false"  />

这会在可视化树中搜索类型 AddressControl 并解析属性。

【讨论】:

以上是关于从其他 Xaml 文件绑定到用户控件中的元素的主要内容,如果未能解决你的问题,请参考以下文章

WPF 用户控件中的数据绑定

WPF 用户控件将数据绑定到用户控件属性

C#如何在没有 XAML 的情况下创建到父元素的(两种方式)数据绑定

wpf : 绑定到另一个 xaml 文件中的控件

x:绑定和用户控件

WPF应用程序中,调用用户控件时,可以访问到在这个用户控件Xaml代码中的所有内容,这样岂不是不安全?