0

我正在尝试创建一个包含 AutoCompleteBox 的用户控件。我想使用此 AutoCompleteBox 的 SelectedItem 属性来填充其他用户控件,其中包含基于用户选择的项目的信息。为了防止每次用户在下拉列表中的项目之间“导航”时触发 SelectedItem,我创建了一个在 DropDownClosed 事件上执行的 EventToCommand,如下所示:

该命令的类型为: public RelayCommand SelectedItemCommand { get; 私人套装;}

这可以正常工作,除非用户开始输入开头有匹配项的内容,但如果用户继续输入并且不再有匹配项,则 DropDown 关闭并且实际上没有选择任何项目。这给了我一个错误,上面写着:

无法将“System.Windows.RoutedPropertyChangedEventArgs`1[System.Boolean]”类型的对象转换为“MyProject.ViewModels.MyItem”类型

我试图在命令的 Command 方法中为该命令创建一个 try-catch 语句,但即使在我进入该方法之前,该异常似乎就已被触发。

我的问题是:如果不匹配(即 AutoCompleteBox 中没有实际的 SelectedItem),如何防止命令被触发?

4

1 回答 1

0

你在使用 PassEventArgsToCommand 吗?在这种情况下,RelayCommand 必须是 RelayCommand<EventArgs>,并且不能使用 CommandParameter。这是ICommand接口的一个限制,它只能有一个CommandParameter。我知道这很烦人,但通常我可以使用不同的方式来获得我想要的东西(例如,通过使用 TwoWay 绑定将 SelectedItem 绑定到我的 VM 上的属性)。

让我知道,劳伦特

于 2010-06-04T09:31:31.290 回答