我正在尝试创建一个包含AutoCompleteBox的UserControl。我想使用此AutoCompleteBox的SelectedItem属性来填充其他UserControls,其中包含基于用户选择的项目的信息。 为了防止每次用户在下拉列表中的项之间“导航”时触发SelectedItem,我创建了一个在DropDownClosed事件上执行的EventToCommand,如下所示:
该命令的类型为: public RelayCommand SelectedItemCommand {get;私人集; }
除了当用户开始在开头键入一些匹配的东西,但是如果用户继续键入并且不再匹配,则该工作正常时,则关闭DropDown并且实际上没有选择任何项目。这给了我一个错误:
无法转换'System.Windows.RoutedPropertyChangedEventArgs`1 [System.Boolean]'类型的对象以输入'MyProject.ViewModels.MyItem'
我尝试在命令的Command方法中创建一个try-catch语句,但是在我进入该方法之前,异常似乎被触发了。
我的问题是: 如果没有匹配(即AutoCompleteBox中没有实际的SelectedItem),如何阻止命令被触发?
答案 0 :(得分:0)
您使用的是PassEventArgsToCommand吗?在这种情况下,RelayCommand必须是RelayCommand< EventArgs>并且可能不使用CommandParameter。它是ICommand接口的限制,它只能有一个CommandParameter。很烦人,我知道,但通常我可以使用不同的方式来获得我想要的东西(例如通过使用TwoWay绑定将SelectedItem绑定到我的VM上的属性)。
让我知道, 劳伦