Я создал пользовательский элемент управления для пользовательского поиска.
public partial class HeaderSearchControl : UserControl
{
public static DependencyProperty SearchTextProperty =
DependencyProperty.Register("SearchText", typeof(string), typeof(HeaderSearchControl),
new PropertyMetadata(new PropertyChangedCallback(SearchTextPropertyChanged)));
public string SearchText
{
get { return (string)GetValue(SearchTextProperty); }
set { SetValue(SearchTextProperty, value); }
}
public HeaderSearchControl()
{
InitializeComponent();
}
private static void SearchTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = d as HeaderSearchControl;
if(control != null)
{
control.SearchBox.Text = (string)e.NewValue;
}
}
}
XAML выглядит следующим образом:
<Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0">
<TextBox x:Name="SearchBox" Style="{StaticResource SearchTextBox}" Text="{Binding Path=SearchText}" />
</Border>
<StackPanel Orientation="Horizontal" Grid.Column="1">
<Button Style="{StaticResource IconSymbolButton}" Content="" Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}" Margin="0 2 2 2"/>
</StackPanel>
</Grid>
</Border>
Свойство в модели представления выглядит следующим образом:
private string _sessionFilter;
public string SessionFilter
{
get { return _sessionFilter; }
set
{
_sessionFilter = value;
}
}
Я использую его следующим образом:
<local:HeaderSearchControl VerticalAlignment="Center"
SearchText="{Binding SessionFilter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Когда для целей тестирования я изменяю значение свойства в модели представления при инициализации, отображается правильное значение и программа "достигает" "часть, в которой определен PropertyChangedCallback(SearchTextPropertyChanged)
.
Однако, когда я печатаю в текстовом поле, свойство в viewmodel, похоже, не обновляется. Что мне не хватает? Может кто-нибудь, пожалуйста, помогите мне?