У меня возникли проблемы с передачей строки из одного пользовательского элемента управления во второй пользовательский элемент управления через INotify.
В представлении у меня есть список, связанный с ObservableCollection типа string с названием SearchHistory, когда пользователь вводит значение в текстовое поле, которое находится внутри пользовательского элемента управления, я передаю значение, введенное в коллекцию, и отображаю его в списке. контроль (немного истории введенных терминов). Это отлично работает.
Я сейчас пытаюсь выбрать элемент списка и передать его обратно в текстовое поле в элементе управления через INotifyPropertyChanged. Хотя я вижу, что выбранное значение передается обратно свойству в модели представления, оно не обновляет текстовое поле в представлении новым выбранным значением.
На мой взгляд, у меня есть следующий xaml для элемента списка
<ListBox Margin="0,0,1,0"
Background="{x:Null}"
BorderBrush="{x:Null}"
BorderThickness="0"
ItemsSource="{Binding SearchHistory}"
SelectionChanged="ListBox_SelectionChanged" />
В коде представления у меня есть следующее (я решил разместить это в коде сзади, поскольку функциональность была специфична для представления при передаче строки между двумя элементами управления. Я не думаю, что это должно быть в модели представления как команда, но если да, пожалуйста, дайте мне знать иначе)
public partial class viewSearch : Page
{
private SearchViewModel _ViewModel;
#region Constructor
public viewSearch()
{
InitializeComponent();
CloseFilterPanel();
CloseHistoryPanel();
CloseSaveSearchPanel();
this._ViewModel = new SearchViewModel();
this.DataContext = this._ViewModel;
}
... отредактировано для краткости
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(((ListBox)sender).SelectedItem != null)
_ViewModel.SearchTerm = (((ListBox)sender).SelectedItem.ToString());
this.NotifyPropertyChanged(_ViewModel.SearchTerm);
}
В ViewModel у меня также объявлено открытое свойство SearchTerm
public string SearchTerm
{
get
{
return this._SearchTerm;
}
set
{
if (this._SearchTerm == value)
return;
// Set the new value and notify
this._SearchTerm = value;
this.NotifyPropertyChanged("SearchTerm"); //this binds to UI search textbox
}
Как я уже говорил, когда я прохожу этот шаг, значение передается из представления в модель представления, и я вижу, что вышеупомянутое свойство обновляется, однако, когда оно попадает в раздел, связанный с пользовательским интерфейсом, в пользовательском интерфейсе ничего не происходит.
Ниже приведен частичный (я исключил оболочку сетки и контекст заголовка) xaml для usercontrol, который содержит текстовый блок. В элементе управления не задан контекст данных, поскольку я наследую контекст данных из родительского представления.
<TextBox x:Name="txtSearchField"
Grid.Column="0"
Margin="5,3,5,1.333"
ap:AttachedProperties.InitialFocus="True"
FontSize="16"
KeyDown="txtSearchField_KeyDown"
Padding="2,5,10,1"
Style="{StaticResource SearchTxtBoxStyle}"
Text="{Binding SearchTerm, Mode=TwoWay}"
TextAlignment="Right"
ToolTipService.ToolTip="{StaticResource TTsearchField}">
<i:Interaction.Triggers>
<ei:KeyTrigger FiredOn="KeyUp" Key="Enter">
<i:InvokeCommandAction Command="{Binding GetSearchResultCommand, Mode=OneWay}"/>
</ei:KeyTrigger>
</i:Interaction.Triggers>
</TextBox>
И, наконец, элемент управления, размещенный на главном экране
<srch:SearchControl x:Name="ucSearchControl" DataContext="{Binding}" Grid.Row="0" />
Любые советы или предложения приветствуются.
Заранее спасибо