2012-11-01 92 views
0

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

ViewModel使用DataTemplate映射到视图。现在,我的ViewModel上只有一个“Session”属性,它暴露了我的Model中包含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的新手,我无法弄清楚如何将项目添加到“Cart”集合中。看起来我应该能够直接从View中访问ViewModel Session.CartItems。是一个参数化命令的路要走吗?如果是这样,任何推荐的文章?

回答

1

在事件处理程序的代码隐藏,你可以得到的视图模型是这样的:

var viewModel = DataContext as <YourViewModelType>; 

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

+0

感谢您的回复。我认为一个命令是要走的路。看起来我需要一个参数与命令,但我只使用WPF中迄今为止参数较少的命令。我会尽可能研究和尝试。 –

+0

好的。我能够得到命令(首选方式)工作。但是,首先简单地从数据上下文中获取视图模型是很好的。感谢分享这种语法;当通过数据模板映射视图模型时,我不确定如何访问它。我将这个标记作为答案,因为它有新手的提示。谢谢! –

1

那么,你得到你的处理程序(视图代码的一部分)呼吁双击。目前很好。

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

+0

感谢您的回应!很高兴确认我走在了正确的轨道上。 –

相关问题