diff --git a/MVPLearning/MainView.Designer.cs b/MVPLearning/MainView.Designer.cs index eda7660..6167463 100644 --- a/MVPLearning/MainView.Designer.cs +++ b/MVPLearning/MainView.Designer.cs @@ -36,6 +36,7 @@ maintainSermonFilerToolStripMenuItem = new ToolStripMenuItem(); testAreaToolStripMenuItem = new ToolStripMenuItem(); bindToModelToolStripMenuItem = new ToolStripMenuItem(); + bindToViewToolStripMenuItem = new ToolStripMenuItem(); menuStrip1.SuspendLayout(); SuspendLayout(); // @@ -73,7 +74,7 @@ // sermonFilerToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { maintainSermonFilerToolStripMenuItem }); sermonFilerToolStripMenuItem.Name = "sermonFilerToolStripMenuItem"; - sermonFilerToolStripMenuItem.Size = new Size(180, 22); + sermonFilerToolStripMenuItem.Size = new Size(140, 22); sermonFilerToolStripMenuItem.Text = "Sermon Filer"; // // maintainSermonFilerToolStripMenuItem @@ -85,7 +86,7 @@ // // testAreaToolStripMenuItem // - testAreaToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { bindToModelToolStripMenuItem }); + testAreaToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { bindToModelToolStripMenuItem, bindToViewToolStripMenuItem }); testAreaToolStripMenuItem.Name = "testAreaToolStripMenuItem"; testAreaToolStripMenuItem.Size = new Size(66, 20); testAreaToolStripMenuItem.Text = "Test Area"; @@ -97,6 +98,13 @@ bindToModelToolStripMenuItem.Text = "Bind To Model"; bindToModelToolStripMenuItem.Click += BindToModelToolStripMenuItem_Click; // + // bindToViewToolStripMenuItem + // + bindToViewToolStripMenuItem.Name = "bindToViewToolStripMenuItem"; + bindToViewToolStripMenuItem.Size = new Size(180, 22); + bindToViewToolStripMenuItem.Text = "Bind To View"; + bindToViewToolStripMenuItem.Click += BindToViewToolStripMenuItem_Click; + // // MainView // AutoScaleDimensions = new SizeF(7F, 15F); @@ -123,5 +131,6 @@ private ToolStripMenuItem maintainSermonFilerToolStripMenuItem; private ToolStripMenuItem testAreaToolStripMenuItem; private ToolStripMenuItem bindToModelToolStripMenuItem; + private ToolStripMenuItem bindToViewToolStripMenuItem; } } diff --git a/MVPLearning/MainView.cs b/MVPLearning/MainView.cs index 237f555..d2b2b42 100644 --- a/MVPLearning/MainView.cs +++ b/MVPLearning/MainView.cs @@ -1,5 +1,6 @@ using MVPLearning.RecordKeeping.SermonFiler; using MVPLearning.TestingArea.ModelProperties; +using MVPLearning.TestingArea.ViewProperties; namespace MVPLearning { @@ -24,5 +25,10 @@ namespace MVPLearning { _ = new ModelPropertiesPresenter(new ModelPropertiesView() { MdiParent = this }); } + + private void BindToViewToolStripMenuItem_Click(object sender, EventArgs e) + { + _ = new ViewPropertiesPresenter(new ViewPropertiesView() { MdiParent = this }); + } } } diff --git a/MVPLearning/TestingArea/ViewProperties/IViewPropertiesView.cs b/MVPLearning/TestingArea/ViewProperties/IViewPropertiesView.cs new file mode 100644 index 0000000..7020831 --- /dev/null +++ b/MVPLearning/TestingArea/ViewProperties/IViewPropertiesView.cs @@ -0,0 +1,12 @@ + +namespace MVPLearning.TestingArea.ViewProperties +{ + public interface IViewPropertiesView + { + string FirstName { get; set; } + + event EventHandler ButtonClick; + + void LoadData(ViewPropertiesModel model); + } +} \ No newline at end of file diff --git a/MVPLearning/TestingArea/ViewProperties/ViewPropertiesModel.cs b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesModel.cs index 98143f6..479866f 100644 --- a/MVPLearning/TestingArea/ViewProperties/ViewPropertiesModel.cs +++ b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesModel.cs @@ -1,6 +1,6 @@ namespace MVPLearning.TestingArea.ViewProperties { - internal class ViewPropertiesModel + public class ViewPropertiesModel { public string FirstName { get; set; } = string.Empty; } diff --git a/MVPLearning/TestingArea/ViewProperties/ViewPropertiesPresenter.cs b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesPresenter.cs new file mode 100644 index 0000000..551da7c --- /dev/null +++ b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesPresenter.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MVPLearning.TestingArea.ViewProperties +{ + internal class ViewPropertiesPresenter + { + private readonly ViewPropertiesView _view; + + public ViewPropertiesPresenter(ViewPropertiesView view) + { + _view = view; + _view.ButtonClick += ButtonClick; + _view.LoadData(new() { FirstName = "Mary" }); + if (_view is Form form) { form.Show(); } + } + + private void ButtonClick(object? sender, string e) + { + _view.LoadData(new() { FirstName = e }); + } + } +} diff --git a/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.Designer.cs b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.Designer.cs new file mode 100644 index 0000000..8b440fd --- /dev/null +++ b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.Designer.cs @@ -0,0 +1,111 @@ +namespace MVPLearning.TestingArea.ViewProperties +{ + partial class ViewPropertiesView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + baseTextBox1 = new BaseLibrary.BaseTextBox(); + button1 = new Button(); + button2 = new Button(); + button3 = new Button(); + label1 = new Label(); + SuspendLayout(); + // + // baseTextBox1 + // + baseTextBox1.BorderStyle = BorderStyle.FixedSingle; + baseTextBox1.Location = new Point(12, 12); + baseTextBox1.Name = "baseTextBox1"; + baseTextBox1.Size = new Size(308, 23); + baseTextBox1.TabIndex = 0; + // + // button1 + // + button1.Location = new Point(12, 41); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 1; + button1.Text = "Mary"; + button1.UseVisualStyleBackColor = true; + button1.Click += Button_Click; + // + // button2 + // + button2.Location = new Point(129, 41); + button2.Name = "button2"; + button2.Size = new Size(75, 23); + button2.TabIndex = 2; + button2.Text = "Sara"; + button2.UseVisualStyleBackColor = true; + button2.Click += Button_Click; + // + // button3 + // + button3.Location = new Point(245, 41); + button3.Name = "button3"; + button3.Size = new Size(75, 23); + button3.TabIndex = 3; + button3.Text = "John"; + button3.UseVisualStyleBackColor = true; + button3.Click += Button_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 16F); + label1.ForeColor = SystemColors.Highlight; + label1.Location = new Point(35, 212); + label1.Name = "label1"; + label1.Size = new Size(262, 30); + label1.TabIndex = 4; + label1.Text = "A change has been made."; + // + // ViewPropertiesView + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(332, 312); + Controls.Add(label1); + Controls.Add(button3); + Controls.Add(button2); + Controls.Add(button1); + Controls.Add(baseTextBox1); + Name = "ViewPropertiesView"; + Text = "Bind To View"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private BaseLibrary.BaseTextBox baseTextBox1; + private Button button1; + private Button button2; + private Button button3; + private Label label1; + } +} \ No newline at end of file diff --git a/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.cs b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.cs new file mode 100644 index 0000000..3aed8d1 --- /dev/null +++ b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.cs @@ -0,0 +1,39 @@ +using MVPLearning.BaseLibrary; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace MVPLearning.TestingArea.ViewProperties +{ + public partial class ViewPropertiesView : BaseForm, IViewPropertiesView + { + private ViewPropertiesModel? _loadedModel; + public ViewPropertiesView() + { + InitializeComponent(); + baseTextBox1.Bind(this, nameof(FirstName)); + PropertyChanged += ModelChanged; + } + + private void ModelChanged(object? sender, PropertyChangedEventArgs e) + { + label1.Visible = _loadedModel is not null && FirstName != _loadedModel.FirstName; + } + + private string _firstName = string.Empty; + public string FirstName { get => _firstName; set { SetProperty(ref _firstName, value); } } + public event EventHandler? ButtonClick; + public void LoadData(ViewPropertiesModel model) + { + _loadedModel = model; + FirstName = model.FirstName; + } + private void Button_Click(object sender, EventArgs e) { ButtonClick?.Invoke(this, ((Button)sender).Text); } + } +} diff --git a/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.resx b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/MVPLearning/TestingArea/ViewProperties/ViewPropertiesView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file