У меня есть несколько MenuItems, чьи команды привязаны к моей модели представления. До сегодняшнего дня все они выполняются должным образом.
Теперь я добавил MenuItem, у которого ItemsSource связан с ObservableCollection. Задача этого MenuItem - перечислить список плагинов, чтобы отображались имена всех плагинов. Затем, когда пользователь нажимает на имя плагина, он должен вызвать функцию для отображения свойств для аудио фильтров.
В моей текущей реализации, которая не работает, я попытался связать данные следующим образом:
<MenuItem Header="Filters" ItemsSource="{Binding FilterPluginNames}">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Command" Value="{Binding ShowFilterDialogCommand}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
Проблема в том, что я получаю ошибку пути BindingExpression, потому что он пытается использовать строку в качестве DataContext объекта MenuItem.
Это наводит меня на мысль, что DataContext для MenuItem для MenuItem автоматически устанавливается на тип объектов в ItemsSource. Это правда?
Если мне нужно изменить DataContext, то я бы хотел изменить его на ViewModel, который обрабатывает все остальные мои команды. Но если я сделаю это, как в мире я могу сказать, для какого плагина я хочу отображать свойства фильтра? Мне нужно как минимум передать CommandParameter, но привязка этого значения к имени фильтра - не самый любимый вариант. Есть ли другие способы сделать это?
Если для DataContext действительно автоматически задан тип объекта в ObservableCollection, то я бы просто вызвал метод интерфейса ShowFilterProperties () напрямую. Могу поспорить, что я не могу сделать это без привязки команд. Если это так, как вы все имеете дело с такого рода приложениями? Вы заставляете все плагины выставлять обработчик команд, который затем показывает диалог?
РЕДАКТИРОВАТЬ - Я изменил свой код, чтобы изменить тип ObservableCollection, и, конечно же, WPF хочет привязать данные к типу T. Поэтому я предполагаю, что один из вариантов заключается в том, чтобы плагин выставлял ICommand, но Я не знаю, странный ли это подход или нет?
РЕДАКТИРОВАТЬ - хорошо, я только что узнал что-то новое. Интерфейсы не могут иметь полей, поэтому нельзя ли связывать данные с плагинами, точка?