2014-09-04 37 views
0

我在我的項目中使用MVVM模式。從內部類向外部類提升事件在c#

我的一流的設計是這樣的:從其他應用程序

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。

回答

0

我會在你的內部類屬性的setter中添加事件觸發器。然後在父類的構造函數中,將IClass = new InnerClass()移動到您的構造函數中並附加您的事件偵聽器。

由於您是MVVM,您可以利用INotifyPropertyChanged,但從長遠來看,熱量會變得雜亂無章。

最好爲每個要通知給父類的屬性設置一個'PropertyName'Changed事件。

+0

但是Model類如何獲取JClass更新的屬性值。 – user2932395 2014-09-04 06:13:16

+0

在JClass中做同樣的事情,當它的屬性值更改觸發一個事件,告訴父類有新的值。大多數事件簽名包括作爲發件人的對象,因此您可以直接從此處檢查它。既然你有JClass集合,那麼在setter中你必須遍歷每個元素來添加你的事件處理器。 – kidshaw 2014-09-04 06:27:23