Я реализую кнопку основного текстового поля поиска ->, но я также хочу, чтобы пользователь мог нажимать клавишу Enter / Return на клавиатуре / клавиатуре, согласно Как включить кнопку ввода наклавиатура на wp7?
Когда вызывается RelayCommand, я просто получаю нулевое значение для содержимого текстового поля поиска.
Я использую MVVM Light.
У меня есть PhoneApplicationPage, который привязан к ViewModel со свойствами:
public class MainViewModel : ViewModelBase
{
private string _searchString;
public RelayCommand Search { get; private set; }
public RelayCommand<KeyEventArgs> SearchTextBoxKeyDown { get; private set; }
public string SearchString
{
get { return _searchString; }
set
{
if (_searchString != value)
{
_searchString = value;
RaisePropertyChanged("SearchString");
}
}
}
public MainViewModel()
{
if (IsInDesignMode)
{
// Code runs in Blend --> create design time data.
}
else
{
// Code runs "for real"
SearchTextBoxKeyDown=new RelayCommand<KeyEventArgs>((e)=>
{
if (e.Key == Key.Enter)
{
// SearchString is empty here?
Search.Execute(null);
}
});
Search = new RelayCommand(() =>
{ // invokes Search with SearchString
},
() =>
{
bool isEnabled = true;
if (string.IsNullOrWhiteSpace(SearchString)) isEnabled = false;
return isEnabled;
});
}
}
Представление использует набор инструментов MVVM Light для вызова метода KeyDown в элементе управления AutoComplete (это элемент управления Telerik,но он выглядит как TextBox и пахнет как TextBox):
<telerikInput:RadAutoCompleteBox
InputScope="Search"
Text="{Binding SearchString,Mode=TwoWay}"
SuggestionsSource="{Binding MruSearchStrings}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<cmd:EventToCommand x:Name="searchStringTextBoxKeyDown" Command="{Binding SearchTextBoxKeyDown, Mode=OneWay}" PassEventArgsToCommand="True">
</cmd:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</telerikInput:RadAutoCompleteBox>
В вызываемом коде я просто получаю значение NULL при доступе к SearchString, с чем связан TextBox - даже если у меня естьвведенный текст в это.Это похоже на то, как будто SearchTextBox не отправил свои данные обратно в ViewModel для ViewModel, чтобы найти в коде события.
Что я делаю не так?