using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateTest
{
class Program
{
static void Main(string[] args)
{
ItemButton CancelBtn = new ItemButton();
ItemButton ConfirmBtn = new ItemButton();
MainBehavior mainWin = new MainBehavior(CancelBtn, ConfirmBtn);
mainWin.ConfirmBtn.OnClick();
mainWin.CancelBtn.OnClick();
Console.ReadKey();
}
}
class ItemButton
{
public Action OnClicked;
public bool ItemEnable;
public ItemButton()
{
ItemEnable = true;
}
public void OnClick()
{
if (ItemEnable)
{
OnClicked();
}
}
}
class MainBehavior:View
{
public ItemButton CancelBtn;
public ItemButton ConfirmBtn;
public MainBehavior(ItemButton cancel, ItemButton confirm)
{
this.CancelBtn = cancel;
this.ConfirmBtn = confirm;
RegisterEvent();
AddEventHandler(EventTypes.CloseWinNotify, CloseWin);
AddEventHandler(EventTypes.PopupWinNotify, OpenWin);
}
private void RegisterEvent()
{
CancelBtn.OnClicked = delegate()
{
RaiseEvent(EventTypes.CloseWinNotify, "close windows");
};
ConfirmBtn.OnClicked = () =>
{
RaiseEvent(EventTypes.PopupWinNotify, "Open window");
};
}
private void CloseWin(params object[] args)
{
Console.WriteLine(args[0].ToString());
}
private void OpenWin(params object[] args)
{
Console.WriteLine(args[0].ToString());
}
}
class View
{
protected Dictionary<EventTypes, EventHandlerDel> EventDictionary;
public View()
{
EventDictionary = new Dictionary<EventTypes, EventHandlerDel>();
}
public void RaiseEvent(EventTypes type, params object[] args)
{
EventHandler(type, args);
}
public void EventHandler(EventTypes type, params object[] args)
{
foreach (var e in EventDictionary.Keys)
{
if (type.CompareTo(e) == 0)
{
EventDictionary[e](args);
}
}
}
public void AddEventHandler(EventTypes type,EventHandlerDel method)
{
EventDictionary.Add(type, method);
}
}
delegate void EventHandlerDel(params object[] args);
enum EventTypes
{
CloseWinNotify,
PopupWinNotify,
}
}