I have the following user control..
`<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>
`
and its code behind is..
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;
}
}
i am trying to bind the SearchText property to another control in my main page where i am using the user control
<local:SearchBox x:Name="SearchBox"/>
<TextBlock Text="{Binding ElementName=SearchBox,Path=SearchText,Mode=TwoWay}"/>
i want to update the texblock's (or any other control's) text property as the SearchText of my usercontrol changes but its not working... but when i click any element like button in my usercontrol textblock's text updates i don't get it why its happening.
Add UpdateSourceTrigger=PropertyChanged
to your UserControl's TextBox like this.
<TextBox
Grid.Column="1"
Tag="Search..."
Text="{Binding SearchText,
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type UserControl}},
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />