0

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

ViewModel 使用 DataTemplate 映射到视图。现在,我的 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 可以。参数化命令是要走的路吗?如果有,有推荐的文章吗?

4

2 回答 2

1

好吧,你会在双击时调用你的处理程序(视图代码的一部分)。目前很好。

现在,您需要通过调用命令(首选方式)或通过 DataContext 与 VM 通信(简单方式)。您的 VM 可以根据需要更新 ObservableCollection,视图将通过通常的绑定获取更改。

于 2012-11-01T12:30:00.640 回答
1

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

var viewModel = DataContext as <YourViewModelType>;

然后将选定的项目转移到购物车。
首选的方法是使用命令,例如DelegateCommand.

于 2012-11-01T12:33:16.533 回答