Я новичок в WPF и MVVM, и я работаю над приложением, использующим оба. Приложение похоже на Windows Explorer, поэтому рассмотрим приложение с главным окном с меню (ShellViewModel), древовидным элементом управления (TreeViewModel) и элементом управления списком (ListViewModel). Я хочу реализовать пункты меню, такие как «Правка» -> «Удалить», которые удаляют выбранный в данный момент элемент (который может находиться в дереве или в списке).
Я использую RelayCommand Джоша Смита, и привязка элемента меню к DeleteItemCommand в ShellViewModel очень проста. Похоже, что реализация DeleteItemCommand требует некоторой довольно тесной связи между ShellViewModel и двумя дочерними моделями представления (TreeViewModel и ListViewModel), чтобы отслеживать фокус / выделение и направлять действие к соответствующему дочернему элементу для реализации. Это кажется мне неправильным и заставляет меня думать, что я что-то упустил.
Написание менеджера фокуса и / или менеджера выбора для ведения бухгалтерии не кажется слишком сложным и может быть выполнено без объединения классов вместе. Система управления окнами уже отслеживает, какой вид имеет фокус, и кажется, что я дублирую код.
В чем я не уверен, так это в том, как я бы направил команду от ShellViewModel вниз либо к ListViewModel, либо к TreeViewModel, чтобы выполнить реальную работу, не внося путаницы в код. Однажды приложение будет расширено, чтобы включить более двух детей, и я хочу, чтобы оболочка была настолько неосведомлена о дочерних элементах, чтобы сделать это расширение максимально безболезненным.
Глядя на некоторые примеры приложений WPF / MVVM (CipherText Карла Шиффлетта, Демонстрация MVVM Джоша Смита и т. Д.), Я не видел ни одного кода, который бы это делал (или я не понял) .
Независимо от того, считаете ли вы, что мой подход далек от базы или я просто упускаю небольшой нюанс, пожалуйста, поделитесь своими мыслями и помогите мне вернуться на правильный путь. Спасибо!