我只是在單聲道和GTK#中學習繩索,而且我遇到了這個問題。我正在構建一個簡單的MVC - 從頂部到底部(即,我將在後面構建接口/合同)。無法訂閱事件
我有一個控制器類:
public class ScanComparerController
{
ScanComparerModel model;
MainWindow view;
public ScanComparerController()
{
model = new ScanComparerModel();
view = new MainWindow();
view.Show();
view.Do += new MainWindow.DoHandler(PerformAction);
}
void PerformAction(MainWindow o, EventArgs e)
{
DoStuff();
}
}
我有一個視圖類:
public partial class MainWindow: Gtk.Window
{
public event DoHandler Do;
public delegate void DoHandler(MainWindow m, EventArgs e);
public MainWindow(): base (Gtk.WindowType.Toplevel)
{
Build();
btnGo.Clicked += buttonGo_clicked;
}
void buttonGo_clicked(object o, EventArgs e)
{
CheckConditions();
if (Do != null)
Do (this, EventArgs.Empty);
}
現在,出於某種原因,有觀點始終認爲,Do == null
,雖然它不應該,因爲我在初始化之後立即添加一個監聽器。不過,我的代碼看起來完全像I refer to。
我知道這可能是我錯過的小事,但我無法弄清楚。
編輯1
正如所建議的定義,我想換行到:
view.Do += new MainWindow.DoHandler(PerformAction);
view.Show();
沒有成功,但是。從來沒有調用Do == null
和PerformAction
。
EDIT 2
我試着eleting自定義處理程序,並切換到普通的事件處理程序,通過AdamBilinski的建議。但是,沒有成功。
編輯3
我雙重檢查和Do
沒有在代碼的其他地方引用。
您有使用自己的事件處理程序的原因嗎?爲什麼不只是公共事件EventHandler Do;? –
@AdamBilinski,根本沒有。更改爲EvenHandler,但沒有成功。它應該工作,對吧? – moskalak