【问题标题】:Resetting SelectedItem on a Listbox bound to a RelayCommand on a ViewModel在绑定到 ViewModel 上的 RelayCommand 的列表框中重置 SelectedItem
【发布时间】:2011-06-09 22:33:06
【问题描述】:
使用 MVVM Light 附带的 EventToCommand 行为,我将 ListBox 的 SelectedItem 绑定到 ViewModel 上的 RelayCommand
在我的 Windows Phone 7 应用程序中一切正常,除了在使用 ListBox 离开视图后返回 SelectedItem 与以前相同。不是我想要的。
我尝试在离开时重置选定的索引,但这会导致命令再次触发。
还有其他人解决了这个问题吗?如何解决的?
TIA
帕特里克·朗
【问题讨论】:
标签:
silverlight
windows-phone-7
mvvm-light
relaycommand
【解决方案1】:
我通过在每个处理程序开始时进行简单检查来处理这个问题。假设您只支持单选项目,您可以检查是否有添加项目。
if (e.AddedItems.Count == 1)
{
// Your code here
}
(其中e 是SelectionChangedEventArgs 的一个实例。)
如果选择已被删除,AddedItems 列表将为空,但 RemovedItems 列表将被填充。
【解决方案2】:
由于您使用的是 mvvm light,您不能为特定视图模型调用 ViewModelLocator 中的 clear 方法吗?
【解决方案3】:
我不再使用 SelectionChanged 事件。现在我用 TapGestures 来完成这一切。这样做的缺点是 TapGesture 不适用于 EventToCommand 行为,因此我在 View 中捕获 Gesture 事件并触发绑定到 Sender 的 DataContext 的 Command。
恕我直言,这比使用 SelctionChanged 和使用 SelectedIndexes 更简洁。