Мне нужно передать методы из пользовательского элемента управления в 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 набор методов, где у меня есть все мои методы, вместо того, чтобы передавать один за другим?
@klm_ +1 для «лучшего редизайна вашего приложения» ... серьезно, передача функций в конструктор обычно фу, но передавать так много, что вам нужно обернуть их в коллекцию, очень-очень некрасиво. В чем здесь настоящая проблема? Зачем вам нужно передавать методы в UserControl? Вы не используете команды и MVVM?
Просто передайте интерфейс ... Реализованный классом Options или ConstructorHelper
Объединить несколько методов? Немного похоже на объект с методами?
List<Func<object>> не работает с делегатами void и не очень гибок в параметрах.
@Thomas Flinkow: Я разделил WPF, UserControl и модель. Поэтому, когда пользователь взаимодействует, я должен передавать функции для изменения модели.
Это определенно одно из основных применений interface.
В основном вы делаете это неправильно, и это вопрос X / Y meta.stackexchange.com/questions/66377/what-is-the-xy-proble м, я даже не уверен, с чего начать. Однако почему вы создаете свой пользовательский элемент управления? вы должны просто использовать его в xmal на своей главной странице, если вам нужно добавить дополнительные функции, вы действительно должны подключить его к свойствам зависимостей и привязать к нему из модальных окон просмотра, доступных из вызывающей страницы. Я думаю, вы действительно хотите еще немного взглянуть на шаблон MVVM и пользовательские элементы управления и переосмыслить свой дизайн
@TheGeneral Хорошо, я подробнее прочитаю, как реализовать MVVM. Но почему UserControl нельзя использовать как часть модели представления?





Хотя это не ответ на ваш точный вопрос, я делать думаю, что это правильный ответ:
Взгляните на Внедрение зависимости.
Проще говоря, таким образом вы определяете нужные вам методы в интерфейсе, реализуете их в отдельном классе и передаете интерфейс. Вы регистрируете, какой класс реализует интерфейс при запуске приложения (или, возможно, даже динамически в зависимости от контекста). Таким образом, определение (контракт) отделяется от реализации, что обеспечивает большую гибкость и возможность тестирования.
Для получения дополнительной информации ознакомьтесь с объяснением Инверсия управляющих контейнеров и шаблон внедрения зависимостей Мартина Фаулера.
Используйте какой-то список. Перечислите <Func <object>> ... но лучше переделайте свое приложение.