我有一個silverlight mvvm應用程序,它將加載到2個ContentControls中的2個用戶控件加載到主視圖中,其中一個列表框顯示項目,另一個列表框顯示編輯按鈕。當我點擊編輯按鈕時,2個新的用戶控件加載到ContentControls中,一個顯示要編輯的數據(EditData)以及其他具有Save和Cancel按鈕(EditAction)的其他控件。 當我點擊保存按鈕,它提出了在單獨GlobalEvents.cs類中定義一樣的事件:事件觸發的次數越來越多
public event EventHandler OnSaveButtonClicked;
public void RaiseSaveButtonClicked()
{
this.OnSaveButtonClicked(this, EventArgs.Empty);
}
,我訂閱它在其它用戶控制EditData,因爲我需要通過傳送該編輯的數據自EventArgs的,所以我已經把它的構造器的視圖模型:
this.globalEvents.OnSaveButtonClicked += (s, e) => SaveData();
,並在保存數據:
public void SaveData()
{
globalEvents.RaiseSaveData(EditedGuy);
}
這引起了另一個前夕nt,將以前的用戶控件加載到其控件內容中,並在列表框中顯示已編輯的數據。這一切都很好,但每當我點擊編輯,然後再次保存,它會引發事件兩次,再次3次,然後4次等等。我怎樣才能讓它只被提出一次?我想這可能是因爲每次我點擊編輯,用戶控制的新實例被加載,我不知道,也許是訂閱的事件保持,所以我試圖
this.globalEvents.OnSaveButtonClicked -= (s, e) => SaveData();
粘貼到處置()方法但沒有成功。我怎樣才能做這項工作?
非常感謝!我不知道lambda不能用於從事件中取消註冊。我的壞,謝謝你給我正確的方式:] – 2011-06-01 11:48:39