Начну с того, что на снимке можно поговорить.
Итак, вы видите, я хочу создать пользовательский элемент управления WPF, который поддерживает привязку к родительскому окну DataContext. Пользовательский элемент управления - это просто Button и ListBox с пользовательским ItemTemplate для представления вещей с помощью метки и кнопки удаления.
Кнопка "Добавить" должна вызвать ICommand в основной модели представления, чтобы взаимодействовать с пользователем при выборе новой вещи (экземпляр IThing). Кнопки "Удалить" в элементе ListBoxItem в пользовательском элементе управления также должны вызвать ICommand в основной модели представления, чтобы запросить удаление связанной вещи. Чтобы это сработало, кнопка "Удалить" должна была отправить некоторую идентифицирующую информацию в модель представления о том, что требуется удалить. Таким образом, существует два типа команд, которые должны быть привязаны к этому элементу управления. Что-то вроде AddThingCommand() и RemoveThingCommand (вещь IThing).
Я получил функциональность, работающую с использованием событий Click, но которая кажется взломанной, создавая кучу кода за XAML и протирающая остальную часть первоначальной реализации MVVM. Я действительно хочу использовать Commands и MVVM в обычном режиме.
Там достаточно кода, чтобы получить базовую демонстрационную работу, я держусь за публикацию всего, чтобы уменьшить путаницу. Что работает, что заставляет меня чувствовать, что я настолько близок, что DataTemplate для ListBox правильно привязывает метку, и когда родительское окно добавляет элементы в коллекцию, они появляются.
<Label Content="{Binding Path=DisplayName}" />
Пока это правильно отображает IThing, кнопка "Удалить" рядом с ним ничего не делает, когда я нажимаю на нее.
<Button Command="{Binding Path=RemoveItemCommand, RelativeSource={RelativeSource AncestorType={x:Type userControlCommands:ItemManager }}}">
Это не является неожиданным, поскольку конкретный элемент не указан, но кнопка "Добавить" не должна указывать что-либо, а также не может вызвать команду.
<Button Command="{Binding Path=AddItemCommand, RelativeSource={RelativeSource AncestorType={x:Type userControlCommands:ItemManager }}}">
Итак, мне нужно "базовое" исправление для кнопки "Добавить" , чтобы он вызывал команду родительского окна, чтобы добавить вещь, и более сложное исправление для кнопки "Удалить", так что она также вызывает родительскую команду, но также проходит вдоль своей связанной вещи.
Большое спасибо за любые идеи,