在c#中将事件从内部类引发到外部类
本文关键字:外部 内部类 事件 | 更新日期: 2023-09-27 18:20:45
我在项目中使用MVVM模式。
我的课堂设计是这样的:
Class Model : AbstractModel
{
InnerClass Iclass = new InnerClass();
Public String ModelProp1
{
get
{
return Iclass.prop1;
}
set
{
Iclass.prop1 = value;
}
}
public override void SetLabel(UInt16 value, int Index)
{
byte[] arr = BitConverter.GetBytes(value);
this.Iclass.IclassConfig[Index].Label = arr[0];
}
public override string DateFormat
{
get { return Iclass.intlDate.ToString(); }
set { Iclass.intlDate = Convert.ToByte(value); }
}
}
Class InnerClass
{
public byte intlDate
{
get { return this.intl_date; }
set { this.intl_date = value;
RaiseModelPropertiesChangedEvent(new ValueChangedEventArgs { Parameter_dateformat = this.intlDate });
}
private JClassa []channel_config = new JClass[2];
public JClass[] IclassConfig
{
get { return this.channel_config; }
set { this.channel_config = value; }
}
}
Public JClass
{
private byte channel_label;
public byte Label
{
get { return this.channel_label; }
set { this.channel_label = value;}
}
我正在从其他应用程序获取数据。更新的数据来自InnerClass属性,我想从那里将更新的数据推送到Model类。
JClass属性的问题来了,我如何激发事件,使其将更新的数据推送到模型类。
为此,我在InnerClass中创建了这样的事件:
public event EventHandler<ValueChangedEventArgs> ModelPropertiesChanged;
public void RaiseModelPropertiesChangedEvent(ValueChangedEventArgs e)
{
if (ModelPropertiesChanged != null)
ModelPropertiesChanged(this, e);
}
public class ValueChangedEventArgs : EventArgs
{
public int Parameter_dateformat { get; set; }
public int Parameter_channelLabel { get; set; }
}
告诉我怎样才能做到这一点。因为我在Jclass中有4个属性,而6个属性是InnerClass。
我会在内部类属性的setter中添加事件触发器。然后在父类的构造函数中,将IClass=new InnerClass()移到构造函数中,并附加事件侦听器。
既然你是MVVM,你可以利用INotifyPropertyChanged,但从长远来看,热度会变得很乱。
最好为要通知父类的每个属性设置一个"PropertyName"Changed事件。