当用户在文本框中输入内容时,我想强制下拉框打开。MVVM/WPF - 当用户在文本框中输入时总是显示组合框下拉列表
我有逻辑来过滤列表,当我不绑定任何东西到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被更改(文本的项目源)时,它会过滤下拉列表的项目源。我现在有它,这样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并不意味着“没有隐藏代码”。向用户显示下拉菜单是UI功能。处理UI中的逻辑。 – Will