在WPF MVVM中,如何使用双击将项目从一个列表框传输到另一个列表框?

时间:2012-11-01 12:20:42

标签: wpf mvvm listbox

我想双击将项目从“购物清单”复制到“购物车”列表框。现在,我的模型只为每个列表提供了ObservableCollection字符串,但最终对象将变得更加复杂。

使用DataTemplate将ViewModel映射到视图。现在,我在我的ViewModel上只有一个“Session”属性,它在我的模型中公开包含ObservableCollections的Session对象。

我试过了......

<ListBox Name="listBoxShopList" ItemsSource="{Binding Path=Session.Products}">
  <ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
      <EventSetter Event="MouseDoubleClick" Handler="ListBoxItemMouseDoubleClick"/>
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>
<ListBox Name="listBoxCart" ItemsSource="{Binding Path=Session.CartItems, UpdateSourceTrigger=PropertyChanged}"/>

从代码隐藏中我得到了事件,我可以获得SelectedItem。但作为MVVM的新手,我无法弄清楚如何将项目添加到“购物车”集合中。看起来我应该能够直接访问ViewModel Session.CartItems,因为View可以。参数化命令是否可行?如果是这样,任何推荐的文章?

2 个答案:

答案 0 :(得分:1)

嗯,你得到你的处理程序(视图代码的一部分),双击调用。好到目前为止。

现在,您需要通过调用命令(首选方式)或通过DataContext与VM通信来通知VM发生双击(或更好地放置一些语义:选择已更改,购物车已接受等) (简单的方法)。您的VM可以根据需要更新ObservableCollection,并且视图将通过常规绑定获取更改。

答案 1 :(得分:1)

在您的事件处理程序代码隐藏中,您可以像这样获取ViewModel:

var viewModel = DataContext as <YourViewModelType>;

然后将所选项目转移到购物车 执行此操作的首选方法是使用命令,如DelegateCommand