在正常情况下,下拉菜单展开后,我们都会选择一个合适的选项;
但是在某些时候,展开下拉菜单后,发现并不需要选择一个选项,只是需要进行后续操作,然后这时在点击其他位置的button时,你会发现:只有combobox的下拉菜单收起来了,但是button的绑定事件并未响应……
为了实现未选择下拉菜单,点击button时combobox能收起下拉菜单,并响应button的click事件,小子采用了下述方法(谁有更好办法,请留言指教):
private void DropDownOpenFalse() { comboBox.IsDropDownOpen = false; comboBox2.IsDropDownOpen = false; comboBox3.IsDropDownOpen = false; } Dictionary<object, ICommand> keyValues = new Dictionary<object, ICommand>(); private void IniKeyValue() { keyValues.Add(MainNeedleButton_CB, VM.SendMainNeedleData); keyValues.Add(FixedNeedleButton1_CB, VM.SendFixedNeedle1Data); keyValues.Add(FixedNeedleButton2_CB, VM.SendFixedNeedle2Data); keyValues.Add(FixedNeedleButton3_CB, VM.SendFixedNeedle3Data); } //为了解决combobox在下拉菜单打开,没做任何选择,直接点击按键时,按钮的click事件不响应 private void NeedleButton_CB_PreviewMouseUp(object sender, MouseButtonEventArgs e) { DropDownOpenFalse(); keyValues[(Button)sender].Execute(null); }
DropDownOpenFalse 为了将3个下拉菜单都收起。
IniKeyValue 实例化时,初始化keyValues;
注意其中的VM,为在xml中将引入的ViewModelf设置了一个x:name(如:<viewmodel:MainWindowsViewModel x:Name="VM"/>)。
NeedleButton_CB_PreviewMouseUp 调用button的PreviewMouseUp事件,实现收起下拉菜单,并调用绑定的ICommand执行。
为了方便添加button或其他控件,将button与执行的ICommand用Dictionary进行了键值绑定,同时也简化了代码……
标签:Combobox,button,绑定,VM,keyValues,CB,下拉菜单 From: https://www.cnblogs.com/chengcanghai/p/17491529.html