Фон
У меня есть TreeView, который следует шаблону проектирования MVVM и поддерживает множественный выбор, записывая выборы TreeViewItem в список.В его нынешнем виде есть несколько типов TreeViewItems, доступных для выбора пользователем.
Это:
- Два
Root
узла типа WorldFolder
и MyDataFodler
, которые могут содержать дочерние Folder
типы - Дочерние
Folder
узлы типов LocationFolder, PersonFolder, CollectionFolder
- дочерние
Item
узлы типа LocationItem, PersonItem
CollectionFolder
могут содержать дочерние узлы Folder
типов
Inвсе это очень хорошо работает с очень небольшим количеством кода и поддерживает коллекции Locations и People, а также коллекции в Collections.
Проблема / Вопрос
Моя модель представления верхнего уровня отслеживает состояние выбора 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 более эффективно?
* Извините за форматирование кода, это приносит мне горе всю неделю *