2012-11-01 94 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

感謝您的迴應!很高興確認我走在了正確的軌道上。 –

相關問題