2009-09-15 90 views
0

我有兩個ListBox的使用對象爲填充的ItemsSource他們。現在,我使用DragDropHelper讓我將一個對象從一個ListBox拖到第二個ListBox。我運行自定義代碼來更改Object上的屬性並更新我的兩個ListBox對象集合。WPF MVVM拖放到另一個控件引發一個事件只

不過,現在我希望能夠刪除這些對象之一到窗口中的其他控制。但是,我不想一定要「拋棄」這個對象。我只想讓外部控件通過提升事件來實現它剛剛被具有ID的對象拋棄。要回顧一下,我有2個列表框。一個列表框是收藏夾,另一個是NonFavorites。我可以愉快地在兩個列表框之間拖放,並且一切正常。現在我想從列表框中拖出最喜歡的/非喜歡的東西,並將其放到另一個控件上。我希望這種控制能夠簡單地說出「嘿!我剛剛得到了一個最喜歡/不喜歡的物體」。

有什麼想法?

回答

0

去年我做了類似的事情(.NET .3.5)。

如果沒有記錯時(經由裝飾器層)「丟棄」,這已被選定和拖曳的對象你在本質上保持到所選擇的對象的引用。當該對象被「丟棄」時,「InstanceDroppedOnUserControlFoo_Handler(... args)」事件處理程序對已被刪除的對象具有無類型引用。

從這裏就可以投(如果該類型是已知的),並訪問ID字段你的心內容。

現在的問題是,是否放置目標用戶控制共享它同視圖模型的的DataContext作爲拖動源的?在大多數情況下,如果不是這種情況,您不會在事件參數中獲得參考,您將得到空值。

如果這是你需要探討這些選項間的ViewModel通信的情況:

使用MVVM消息傳遞框架(MVVM Light Framework see Messenger component) 或 酒吧次通過WPF棱鏡組成事件 - EventAggregator

然後按照此過程中(或一些更適合您的需求):

  • 當一個項目已經選定,並正在拖累,其所持有的參考您的拖放來源的ViewModel的屬性。
  • 當物品被丟棄時,發佈一條消息,說明「我想引用正在被拖動的選定物品」。
  • 拖動源可以發佈一條消息,作爲對被拖動的對象的引用的響應,將被請求的ViewModel接收。

很明顯,您可以根據您的需要量身定製引用。我會給你留下最後一個建議,考慮使用管理這種操作的控制器類可能是值得的。我看到一個控制器正在被微軟的&實例與樣本中的MVVM配合使用,所以它並不是聞所未聞的。

相關問題