Страницы

Поиск по вопросам

вторник, 23 октября 2018 г.

Как получить доступ из моего класса к экземпляру окна в WPF?

Собственно хотелось бы обратится к элементам UI главного окна приложения, только вот непонятно каким образом. Понятное дело, что из самого класса окна к контролам легко получить доступ, а вот чтобы из стороннего - непонятно как. (Передавать их по ссылке не годится). Передавать контролы или само окно в класс по ссылке не годится, так как в нём есть методы, которые должны асинхронно выполняться с обработчиками окна. Есть ли какой-то ещё способ? В противном случае придётся использовать ISynchronizeInvoke, а этого хотелось бы избежать.


Ответ

Передавать контролы по ссылкам, конечно, не стоит. Нужно создать event в главном окне и уведомлять его через этот event о необходимости изменения контролов. Это если в одном потоке находятся главное окно и тот, кто посылает ему уведомление. // Какой то класс public class MyClass { public event MyDelegate MyDelegateEvent; // Ваш евент public void f() { // При вызове функции f() уведомляем главное окно (и всех кто подпишется на него) MyDelegateEvent(); } }
public delegate void MyDelegate(); // Делегат
public partial class MainWindow : Window { public MainWindow() { InitializeComponent();
MyClass my = new MyClass(); // Это просто создание нашего класса // Создаем наше уведомление my.MyDelegateEvent += new MyDelegate(my_MyDelegateEvent); }
void my_MyDelegateEvent() { // Изменяем нужные контролы } }

Комментариев нет:

Отправить комментарий