MVC Sample for Winform
์ด์ฒ ์ฐ
-
๋จผ์ Winform ํ๋ก์ ํธ(.Net 7)๋ฅผ ๋ง๋ ๋ค.
0-1. ํ๋ก์ ํธ ์์ฑ์์ 'Console Applicationโ์ ์ ํํ๋ค.
0-2. Form1 ๋์์ธ์์ TextBoxData, ButtonReset, ButtonIncrease ๋ฅผ ์ถ๊ฐํ๋ค. -
IView.cs
public interface IView
{
void Set(int data);
event EventHandler<EventArgs> ResetPressed;
event EventHandler<EventArgs> IncreasePressed;
event EventHandler<DataChangedEventArgs> DataChanged;
}
- Model.cs
public class Model
{
public Model() { }
public int Data
{
get => _data;
private set
{
if (_data != value)
{
_data = value;
DataChanged!.Invoke(this, new DataChangedEventArgs(value));
Console.WriteLine(ToString());
}
}
}
private int _data = 0;
public void Reset() => Data = 0;
public void Increase() => Data++;
public void Set(int data) => Data = data;
public event EventHandler<DataChangedEventArgs>? DataChanged;
public override string ToString() => $"Data:{Data}";
}
- Controller.cs
public class Controller
{
public Model Model { get; private set; }
public IView View { get; private set; }
public Controller(Model model, IView view)
{
Model = model;
View = view;
// Sync model and view.
View.Set(Model.Data);
Model.DataChanged += Model_DataChanged;
View.ResetPressed += View_ResetPressed;
View.IncreasePressed += View_IncreasePressed;
View.DataChanged += View_DataChanged;
}
private void Model_DataChanged(object? sender, DataChangedEventArgs e)
{
View.Set(e.Data);
}
private void View_ResetPressed(object? sender, EventArgs e)
{
Model.Reset();
}
private void View_IncreasePressed(object? sender, EventArgs e)
{
Model.Increase();
}
private void View_DataChanged(object? sender, DataChangedEventArgs e)
{
Model.Set(e.Data);
}
}
public class DataChangedEventArgs : EventArgs
{
public int Data { get; init; }
public DataChangedEventArgs(int data)
{
Data = data;
}
}
- IView ์์๋ฐ์ Form1.cs
public partial class Form1 : Form, IView
{
public Form1()
{
InitializeComponent();
}
public event EventHandler<EventArgs>? ResetPressed;
public event EventHandler<EventArgs>? IncreasePressed;
public event EventHandler<DataChangedEventArgs>? DataChanged;
private void TextBoxData_TextChanged(object sender, EventArgs e)
{
DataChanged?.Invoke(this, new DataChangedEventArgs(int.Parse(textBoxData.Text)));
}
private void ButtonReset_Click(object sender, EventArgs e)
{
ResetPressed?.Invoke(this, new EventArgs());
}
private void ButtonIncrease_Click(object sender, EventArgs e)
{
IncreasePressed?.Invoke(this, new EventArgs());
}
public void Set(int data)
{
textBoxData.Text = data.ToString();
}
}
- Program.cs
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
#region MVC Sample for Winform.
var view = new Form1();
var model = new Model();
_ = new Controller(model, view);
#endregion
Application.Run(view);
}
}