使用Silverlight 3+;MVVM灯光工具包

使用Silverlight 3+;MVVM灯光工具包,silverlight,silverlight-3.0,silverlight-toolkit,mvvm-light,Silverlight,Silverlight 3.0,Silverlight Toolkit,Mvvm Light,我正在尝试创建一个包含自动完成框的UserControl。我想使用此自动完成框的SelectedItem属性,根据用户选择的项目向其他用户控件填充信息。 为了防止每次用户在下拉列表中的项目之间“导航”时触发SelectedItem,我创建了一个EventToCommand,在DropDownClosed事件上执行,如下所示: 该命令的类型为: public RelayCommand SelectedItemCommand{get;private set;} 除了当用户开始键入开始时有匹配项的内

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

该命令的类型为: public RelayCommand SelectedItemCommand{get;private set;}

除了当用户开始键入开始时有匹配项的内容外,这一切都很好,但是如果用户继续键入,并且不再有匹配项,则下拉列表将关闭,并且实际上没有选择任何项目。这给了我一个错误,它说:

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

我试图在命令方法中为该命令生成一个try-catch语句,但是在我进入该方法之前,异常似乎就被触发了

我的问题是:
如果没有匹配项(即自动完成框中没有实际的SelectedItem),如何防止命令被激发?

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

让我知道,
Laurent

我尝试了一个解决方案,在该解决方案中,我发送了,而不是为了能够检查空值,如果没有空值,我将其转换为MyItem。这是一种正确的方法还是有更好的方法?嗨,很显然,EventToCommand的代码没有出现在我的帖子中。我使用EventToCommand的方式如下:我并没有真正遵循您提出的解决这个问题的建议(VM属性上的双向绑定)。你能详细说明一下吗?顺便说一句,你对我在我的帖子上的评论有什么评论(关于发送替代品)。这是一种糟糕的做法吗?很抱歉格式不好,似乎所有换行符都在注释中被忽略了!:/嗨,我编辑了我的答案,因为一些迹象被吞下了。希望它现在更有意义。关于双向绑定,您不明白什么?只需在VM中定义一个属性,并在TextBox.Text属性和刚才定义的VM属性之间设置双向数据绑定。如果你不明白,请给我发电子邮件。干杯,劳伦特