我注意到.NET和Mono和我之間的差異有同樣的問題。比較.NET和Mono的源代碼後,它首先出現的是,如果你想在ViewForm收到通知propertyName的任何Control.TextChanged你首先要在你的模型:
public event PropertyChangedEventHandler PropertyChanged;
public event EventHandler TextChanged;
protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
if (propertyName == "Text")
{
TextChanged?.Invoke(this, EventArgs.Empty);
}
}
}
事件處理程序被命名爲「框TextChanged很重要「爲了通知一個TextChanged。 然後仍然在你的模型,你可以設置:
private string _Text = "";
public string Text {
get {
return _Text;
}
set {
if (_Text != value) {
NotifyPropertyChanged ("Text");
}
}
}
而現在,在你看來,你可以做這樣的事情。
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace EventStringTest
{
public partial class Form1 : Form
{
Model md = Model.Instance;
public Form1()
{
InitializeComponent();
textBox1.DataBindings.Add("Text", md, "Text", false
, DataSourceUpdateMode.OnPropertyChanged);
this.OnBindingContextChanged(EventArgs.Empty);
textBox1.TextChanged += (object sender, System.EventArgs e) => { };
}
private void Form1_Load(object sender, EventArgs evt)
{
md.PropertyChanged += (object s, PropertyChangedEventArgs e) => { };
// This is just to start make Text Changed in Model.
md.TimerGO();
}
}
}
這似乎很多代碼,但我仍然在尋找一個更優雅的更好的解決方案。
你最終搞清楚了嗎?我遇到了同樣的問題。 – Kohanz
我發現在添加數據綁定時,他們沒有使用Mono註冊到PropertyChangedEvent,但他們使用.Net。仍然不知道爲什麼。 – soulsource