私は.NETとMonoと私の違いに気づいていました同じ問題がありました。イベントハンドラは、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);
}
}
}
それは重要です:.NETとMonoのソースコードを比較した後、あなたがしたい場合はどのControl.TextChangedあなたが最初にあなたのモデル内に持っているViewFormでpropertyNameの通知を受け取ったことを最初に表示されます"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