public class IntChangeArgs { public int OldValue{ get; set;} public int NewValue{ get; set;} } public delegate void IntChangeHandler(object sender, IntChangeArgs i); public partial class YourControl : UserControl { public event IntChangeHandler OnIntChanged; public void YouMethod() { //... 如果你把这个数从 3 改变成 5 if(OnIntChanged != null) { OnIntChanged(this, new IntChangeArgs {OldValue = 3, NewValue = 5}); } } } ============== 你在另外的位置就实例你的控件 var yc = new YourControl(); yc.OnIntChanged += new IntChangeHandler(DataCon_OnIntChanged);
不要忘记 你在控件里面控制好 每次更改 int 的时候都要执行if(OnIntChanged != null) { OnIntChanged(this, new IntChangeArgs {OldValue = 3, NewValue = 5}); } 当然这个方法可以放在 set 方法里
通过Transparent Proxy public class Person : INotifyPropertyChanged { private string firstNameValue; public string FirstName{ get { return firstNameValue; } set { firstNameValue=value; NotifyPropertyChanged("FirstName"); } } public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
我是这样写的,可是不成功! namespace TeTu { using System.Collections; public delegate void IntDataChangeHandler(object sender, int i); public partial class ctrMainCalendar : UserControl { public ctrMainCalendar() { InitializeComponent(); } public int int_FlagDataChanged = 0; public event IntDataChangeHandler OnIntDataChanged; private void ctrMainCalendar_Load(object sender, EventArgs e) { this.OnIntDataChanged += new IntDataChangeHandler(DataCon_OnIntDataChanged); } private void DataCon_OnIntDataChanged(object sender, int i) { button1.Text = Convert.ToString(i); } private void setvalue() { OnIntDataChanged(this, int_FlagDataChanged); } } } 控件外部: private void button1_Click(object sender, EventArgs e) { ctrMainCalendar1.int_FlagDataChanged++; } 该如何修改?
public class IntChangeArgs
{
public int OldValue{ get; set;}
public int NewValue{ get; set;}
}
public delegate void IntChangeHandler(object sender, IntChangeArgs i); public partial class YourControl : UserControl
{
public event IntChangeHandler OnIntChanged; public void YouMethod()
{
//... 如果你把这个数从 3 改变成 5 if(OnIntChanged != null)
{
OnIntChanged(this, new IntChangeArgs {OldValue = 3, NewValue = 5});
}
}
} ==============
你在另外的位置就实例你的控件 var yc = new YourControl();
yc.OnIntChanged += new IntChangeHandler(DataCon_OnIntChanged);
private void DataCon_OnIntChanged(object sender, IntChangeArgs i)
{
//这里
}
{
OnIntChanged(this, new IntChangeArgs {OldValue = 3, NewValue = 5});
}
当然这个方法可以放在 set 方法里
public class Person : INotifyPropertyChanged
{
private string firstNameValue;
public string FirstName{
get { return firstNameValue; }
set
{
firstNameValue=value;
NotifyPropertyChanged("FirstName");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
namespace TeTu
{
using System.Collections;
public delegate void IntDataChangeHandler(object sender, int i); public partial class ctrMainCalendar : UserControl
{
public ctrMainCalendar()
{
InitializeComponent();
} public int int_FlagDataChanged = 0;
public event IntDataChangeHandler OnIntDataChanged; private void ctrMainCalendar_Load(object sender, EventArgs e)
{
this.OnIntDataChanged += new IntDataChangeHandler(DataCon_OnIntDataChanged);
} private void DataCon_OnIntDataChanged(object sender, int i)
{
button1.Text = Convert.ToString(i);
} private void setvalue()
{ OnIntDataChanged(this, int_FlagDataChanged);
}
}
}
控件外部:
private void button1_Click(object sender, EventArgs e)
{
ctrMainCalendar1.int_FlagDataChanged++;
}
该如何修改?
写在 NotifyPropertyChanged 里面
// 利用系统 delegate
public event EventHandler IntValueChanged;protected void OnIntValChanged(EventArg e)
{
// 引发 IntValueChanged 事件
if (IntValueChanged != null)
this.IntValueChanged (this, e);
}// 在需要引发事件的地方 调用 this.OnIntValChanged(new EventArgs());
int intValue = 0;
public int IntValue
{
get
{
return this.intValue;
}
set
{
if (this.intValue != value)
{
this.intValue = value;
this.OnIntValueChanged(new EventArgs());
}
}
}
另外你的控件里属性改成public int int_FlagDataChanged = 0
{
get { return int_flagDataChanged; }
set
{
int_flagDataChanged = value;
if(OnIntDataChanged != null)
{
OnIntDataChanged(this, int_flagDataChanged);
}
}
}
然后 控件外 调用的时候 别忘了 添加 事件响应函数
真逗!你如果写过实现INotifyPropertyChanged的代码,还不知道如何声明public event .....?这个接口不就是强迫你实现这个声明的么?!唉,不知道你何时能清醒,那样就比较能独立工作了。