Связать методы, передаваемые в конструктор

Мне нужно передать методы из пользовательского элемента управления в WPF. Для этого я использую делегатов (UserControl вызывает WPF, поэтому я не могу вызвать UserControl из WPF).

в UserControl:

myWPF = new WPF1.UserControl1(Method1, Method2, Method3, Method4);

в WPF:

public delegate int Del1(int i)
public Del1 MyMethod1;
public delegate string Del2(int i)
public Del2 MyMethod2;
public delegate void Del3()
public Del3 MyMethod3;
public delegate void Del4()
public Del4 MyMethod4;

// Constructor
public UserControl1(Del1 MyMethod1, Del2 MyMethod2,Del3 MyMethod3,Del4 MyMethod4)
{
   MyMethod1 = Method1;
   MyMethod2 = Method2;
   MyMethod3 = Method3;
   MyMethod4 = Method4;
}

У меня есть много способов пройти. Можно ли передать un набор методов, где у меня есть все мои методы, вместо того, чтобы передавать один за другим?

Используйте какой-то список. Перечислите <Func <object>> ... но лучше переделайте свое приложение.

klm_ 11.06.2018 09:18

@klm_ +1 для «лучшего редизайна вашего приложения» ... серьезно, передача функций в конструктор обычно фу, но передавать так много, что вам нужно обернуть их в коллекцию, очень-очень некрасиво. В чем здесь настоящая проблема? Зачем вам нужно передавать методы в UserControl? Вы не используете команды и MVVM?

Thomas Flinkow 11.06.2018 09:22

Просто передайте интерфейс ... Реализованный классом Options или ConstructorHelper

bommelding 11.06.2018 09:22

Объединить несколько методов? Немного похоже на объект с методами?

spender 11.06.2018 09:23

List<Func<object>> не работает с делегатами void и не очень гибок в параметрах.

bommelding 11.06.2018 09:24

@Thomas Flinkow: Я разделил WPF, UserControl и модель. Поэтому, когда пользователь взаимодействует, я должен передавать функции для изменения модели.

NicolasNicolas 11.06.2018 09:30

Это определенно одно из основных применений interface.

Matthew Watson 11.06.2018 09:51

В основном вы делаете это неправильно, и это вопрос X / Y meta.stackexchange.com/questions/66377/what-is-the-xy-proble‌ м, я даже не уверен, с чего начать. Однако почему вы создаете свой пользовательский элемент управления? вы должны просто использовать его в xmal на своей главной странице, если вам нужно добавить дополнительные функции, вы действительно должны подключить его к свойствам зависимостей и привязать к нему из модальных окон просмотра, доступных из вызывающей страницы. Я думаю, вы действительно хотите еще немного взглянуть на шаблон MVVM и пользовательские элементы управления и переосмыслить свой дизайн

TheGeneral 11.06.2018 10:28

@TheGeneral Хорошо, я подробнее прочитаю, как реализовать MVVM. Но почему UserControl нельзя использовать как часть модели представления?

NicolasNicolas 11.06.2018 10:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
52
1

Ответы 1

Хотя это не ответ на ваш точный вопрос, я делать думаю, что это правильный ответ:

Взгляните на Внедрение зависимости.

Проще говоря, таким образом вы определяете нужные вам методы в интерфейсе, реализуете их в отдельном классе и передаете интерфейс. Вы регистрируете, какой класс реализует интерфейс при запуске приложения (или, возможно, даже динамически в зависимости от контекста). Таким образом, определение (контракт) отделяется от реализации, что обеспечивает большую гибкость и возможность тестирования.

Для получения дополнительной информации ознакомьтесь с объяснением Инверсия управляющих контейнеров и шаблон внедрения зависимостей Мартина Фаулера.

Другие вопросы по теме