Я хочу заставить раскрывающийся список открыть, когда пользователь вводит текстовое поле.MVVM/WPF - всегда показывайте выпадающий список combobox, когда пользователь вводит текстовое поле
У меня есть логика для фильтрации списка, и когда я не привязываю ничего к элементу IsDropDownOpen, он работает по желанию, за исключением случаев, когда текстовое поле теряет фокус, а затем переориентируется, выпадающее меню не возвращается, если только я щелкните стрелку.
<ComboBox x:Name="nodeList"
Text="{Binding UserInput, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding NodeTokenList}" DisplayMemberPath="FullNodeName"
HorizontalAlignment="Left" VerticalAlignment="Top" Width="324"
Margin="162,49,0,0" Height="32"
IsDropDownOpen="{Binding Path=ShowDropDown, Mode=TwoWay, Converter= {StaticResource BoolToVis}, UpdateSourceTrigger=PropertyChanged}" />
Выше моего xaml.
Каждый раз, когда UserInput изменяется (исходный текст для текста), он фильтрует источник items для выпадающего списка. Теперь у меня есть это так, чтобы ShowDropDown (мой BOOL для IsDropDownOpen)
Вот мой UserInput и определение ShowDropDown:
public string UserInput
{
get { return _userInput; }
set
{
_userInput = value;
FilterListOnKeyPress();
OnPropertyChanged("UserInput");
}
}
public bool ShowDropDown
{
get { return _showDropDown; }
set
{
_showDropDown = value;
OnPropertyChanged("ShowDropDown");
}
}
и, наконец, вот моя реализация FilterListOnKeyPress()
private void FilterListOnKeyPress()
{
if (string.IsNullOrEmpty(UserInput))
{
NodeTokenList = BackUpNodeTokenList;
return;
}
else
{
NodeTokenList = BackUpNodeTokenList.Where(x => x.FullNodeName.ToLower().Contains(UserInput.ToLower())).ToList();
ShowDropDown = true;
}
}
Интересно, может ли AutoCompleteBox быть лучшим вариантом в этом случае. – ChrisF
Вам, вероятно, необходимо явно обработать GetFocus, например: http://stackoverflow.com/questions/1217268/how-to-get-notified-when-a-window-get-focus-in-wpf –
'ShowDropDown 'не является mvvm. И MVVM не означает «никакого кода». Отображая пользователя, выпадающий список является функцией пользовательского интерфейса. Управлять логикой в пользовательском интерфейсе. – Will