如何绑定到WPF中的usercontrol内的控件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何绑定到WPF中的usercontrol内的控件?相关的知识,希望对你有一定的参考价值。

我有以下用户控件..

`<UserControl x:Class="School_Manager.SearchBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:School_Manager"
             mc:Ignorable="d"
             d:DesignHeight="50" d:DesignWidth="400">


        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>

            <!--Cancle Button-->
            <Button Grid.Column="0"
                    Margin="0 0 -10 0"
                    Style="{StaticResource IconGrowButton}"
                    Content="{StaticResource FontAwesomeCloseIcon}"
                    />

            <!--SearchBox-->
            <TextBox 
                Grid.Column="1"
                Style="{StaticResource SearchTextBox}"
                Tag="Search..."
                Text="{Binding SearchText,
                       RelativeSource={RelativeSource 
                       Mode=FindAncestor, 
                       AncestorType={x:Type UserControl}}, 
                       Mode=TwoWay}" />

            <!--Search Button-->
        <Button Grid.Column="2"
                    Margin="-10 0 0 0"
                    Style="{StaticResource IconGrowButton}"
                    Content="{StaticResource FontAwesomeSearchIcon}"
                    />

        </Grid>
</UserControl>
`

它背后的代码是......

 public partial class SearchBox : UserControl
{

    public SearchBox()
    {
        InitializeComponent();
    }



    public string SearchText
    {
        get => (string)GetValue(SearchTextProperty);
        set => SetValue(SearchTextProperty, value);
    }
    public static readonly DependencyProperty SearchTextProperty =
      DependencyProperty.Register("SearchText", typeof(string), typeof(SearchBox), new PropertyMetadata(new PropertyChangedCallback(OnSearchTextChanged)));


    private static void OnSearchTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var searchBox = (SearchBox)d;
        searchBox.SearchText = e.NewValue as string;
    }


}

我试图将SearchText属性绑定到我的主页面中我使用用户控件的另一个控件

 <local:SearchBox x:Name="SearchBox"/>

 <TextBlock Text="{Binding ElementName=SearchBox,Path=SearchText,Mode=TwoWay}"/>

我想更新texblock(或任何其他控件)的文本属性,因为我的usercontrol的SearchText发生了变化,但它不起作用......但是当我在usercontrol textblock的文本更新中点击任何元素之类的按钮时,我不知道为什么它发生。

答案

像这样将UpdateSourceTrigger=PropertyChanged添加到UserControl的TextBox中。

 <TextBox 
    Grid.Column="1"
    Tag="Search..."
    Text="{Binding SearchText,
           RelativeSource={RelativeSource 
           Mode=FindAncestor, 
           AncestorType={x:Type UserControl}}, 
           Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

以上是关于如何绑定到WPF中的usercontrol内的控件?的主要内容,如果未能解决你的问题,请参考以下文章

设置绑定到 WPF 用户控件内的自定义 DependencyProperty

数据绑定到 WPF 中的 UserControl

如何从 UserControl 访问 WPF 页面中的公共变量?

如何将 WPF DataGrid DataColumns 可见性绑定到 UserControl 的 ViewModel 上的属性?

wpf usercontrol,将按钮的命令参数绑定到父用户控件

在WPF中的UserControl中的ItemsControl中绑定问题