我有下面的MVVM設計圖案並且通過在列表記錄的TreeViewItem選擇支持多種選擇一個TreeView的上收集。就目前而言,有幾種類型的TreeViewItem可供用戶選擇。
它們是:WorldFolder
類型和
- 兩個
Root
節點MyDataFodler
它可以包含子Folder
類型 - 兒童的類型
LocationFolder, PersonFolder, CollectionFolder
- 兒童型
Item
節點LocationItem, PersonItem
CollectionFolder
可以Folder
節點包含Folder
typ的子節點es
在所有這些工作中,只需很少的代碼就能很好地工作,並支持位置集合和人員集合以及集合中的集合。
問題/疑問
我的頂層視圖模型跟蹤TreeViewItems的選擇狀態和當前選擇的可以是Item
,Folder
甚至Root
類型的節點的組合。根據用戶的選擇,我想創建一個動態的ContextMenu。到目前爲止這工作!當我選擇幾個LocationItem
和/或PersonItem
類型的節點時,我的視圖模型會生成一個自定義的ContextMenu。問題是複雜性!我的觀點模型很快就變成了幾十個if/else if/else語句來捕捉所有可能的排列!
例如:
if (_selectedItems.All(item => item is PersonItem)) // Only people selected
{
// Create ContextMenu based on only PersonItems
}
else if(_selectedItems.All(item => item is LocationItem)) // Only Locations
{
// Create ContextMenu based only on LocationItems
}
...
有沒有更好的方式來更有效地處理用戶選擇所有可能的排列和生成我ContextMenus?
*很抱歉的代碼格式,它已經給了我悲傷的所有周*
雖然不是我正在尋找的答案,但確實把我的思路放在正確的軌道上,我正在做在WPF中非常相似。我無法將我的事件直接綁定到ViewModel,但是您的正確之處在於,當用戶右鍵單擊某個節點時,我應該使用與該節點相關的選項來填充ContextMenu。 – Matthew 2010-07-23 13:28:57