Начну с того, что вы можете сделать несколько снимков.Как связать команды WPF между UserControl и родительским окном
Итак, вы видите, я хочу, чтобы создать пользовательский элемент управления 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 }}}">
Так что мне нужно, это «базовый» Фикс для кнопки Add, так что он вызывает команду родительского окна, чтобы добавить кое-что, и тем сложнее исправить для кнопки Remove, так что он также называет родительская команда, но также проходит по ее связанной вещи.
благодарит за любые мысли,
Добавьте две свойства ICommand на поверхность UserControl. Привяжите кнопки в элементе управления к этим свойствам. Свяжите свойства с добавлением и удалением ICommands в модель представления вашего окна. Сделано и сделано. – Will
Спасибо, Уилл. Я работаю с решением Ганеша и все еще испытываю трудности. Я попробую ваше предложение и дам вам знать. –