ユーザーがテキストボックスに入力するときにドロップダウンを強制したいです。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が変更され(テキストのアイテムソース)、ドロップダウンリストのitemsourceがフィルタリングされます。 I ShowDropDown(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;
}
}
このケースでは、オートコンプリートボックスが最適なオプションかどうかと思います。 – ChrisF
GetFocusを明示的に処理する必要があります。例:http://stackoverflow.com/questions/1217268/how-to-get-notified-when-a-window-get-focus-in-wpf –
'ShowDropDown 'はmvvmではありません。 MVVMは「コードビハインドなし」を意味するものではありません。ドロップダウンはUI機能です。 UIのロジックを処理します。 – Will