2014-01-17 15 views
0

Возможно ли обрабатывать события в другом классе, но класс MainWindow, для событий пользовательского интерфейса?UI Eventhandling другим классом

Пример:

class MainWindow 
{ 
    public Button b; 
    //Some Methods 
} 

class OtherClass 
{ 

    public async someMethod() 
    { 
     await someTaskToWait(); 
    } 
    public Task someTaskToWait() 
    { 
     if(...) 
     { 
     ButtonClickEvent mainWinButton_click = null; 
     mainWinButton_click= (_, __)=> 
     { 
      MainWindow.b.ClickEvent += mainwinButton_click; 
     } 

      MainWindow.b.ClickEvent -= mainwinButton_click; 

     } 


    } 

} 

Я хочу, чтобы обрабатывать Button.Click() событие в OtherClass не MainWindow.

Спасибо за помощь.

+0

Имейте нажатие кнопки MainWindow на событие вызова метода mainwinButton_click в другом классе ...? –

ответ

0

При регистрации обработчика событий в коде позади, это было бы возможно:

// Constructor of MainWindow class 
pubic MainWindow() 
{ 
    b.Click+=new OtherClass().mainwinButton_click; 
} 

Вы также можете зарегистрироваться с другого класса

public class OtherClass 
{ 
    public void RegisterUnregister 
    { 
     // Reference to main class 
     MainWindow ref =...; 

     // register event... 
     ref.b.Click+=mainwinButton_click; 

     // Unregister event... 
     ref.b.Click-=mainwinButton_click; 
    } 
} 

Если ваша цель состоит в том, чтобы иметь обработчик событий разделенные на разные файлы, подумайте об использовании частичных классов.

// MainWindow.cs 
public partial class MainWindow 
{ 
    // your button here 
} 

// MainWindow.Events.cs 
public partial class MainWindow 
{ 
    private void mainwinButton_click(...) 
} 
+0

Моя цель - добавить и удалить обработчик событий из другого класса, см. Вопрос, я его модифицировал. – DientesDeCheto

+0

@ user3167232: см. Мой обновленный anser – David

0

Вместо этого вы можете использовать interface.

public interface IMainWindowHandler 
{ 
    void ButtonClicked(object sender); 
} 

Тогда в вашем MainWindow вы бы хранить IMainWindowHandler недвижимости:

public IWindowHandler WindowHandler { get; set; } 

... 

void myButton_Click(object sender, EventArgs e) 
{ 
    if (this.WindowHandler == null) return; 

    this.WindowHandler.ButtonClicked(sender); 
} 

Это также позволяет «горячая замена» интерфейс обработчика очень легко и динамично.

Смежные вопросы