2015-05-01 31 views
1

我開始認爲我正在鑽研不可能的事情。將事件添加到集合,然後發送該集合中的所有事件C#

所以基本上當一個屬性被更改,則將觸發一個事件:

private DateTime _DateFrom; 

public DateTime DateFrom 
{ 
    get 
    { 
     return _DateFrom; 
    } 
    set 
    { 
     var oldValue = _DateFrom; 
     _DateFrom = value; 

     if (_DateFrom != oldValue) 
     { 
      //GetPropertyName is an extension method 
      //Used Specifically for notifying of priority changed fields 
      NotifyPropertyChanged(ReflectionTypes.GetPropertyName(() => this._DateFrom)); 
     } 
    } 
} 

訂閱後會着火,然後傳遞給其他決定事件觸發它的switch語句。由於事件可能會出現兩次,因此我想將一個事件添加到集合中,然後觸發集合中的所有事件。

public void OnOpportuntiyPropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 

    //Event Collection HERE? 

    switch (e.PropertyName) 
    { 
      //Remove hard coded strings and replace with reflection 
     case "DateFrom": 
      //Event Name + Add to Event Collection 
      //Event Name + Add to Event Collection 
      break; 
     case "SomeOtherChange": 
      //Event Name + Add to Event Collection 
      break; 
     case "MoreChanges": 
      //Event Name + Add to Event Collection 
      //Event Name + Add to Event Collection 
      //Event Name + Add to Event Collection 
      break; 
    } 

    //Events will fire with successful subscription(from another location) 
} 

我似乎無法得到我的頭在這一個,任何幫助非常感謝!因此,重新上限我想聲明一個事件集合,然後遍歷交換機,然後添加到集合。一旦切換過程完成,我想發起集合中的所有事件。

//編輯

所以我希望解釋的過程中,將明確的事情了一點點。

因此,在表單中的UI層上,用戶更改「DateFrom」字段,然後傳遞給「DateFrom」屬性(Opportunity Class)。由於這是一個業務關鍵變化(Custom Travel CRM),因此需要觸發一個事件(NotifyPropertyChanged)。

一旦我們點擊NotifyPropertyChanged事件,它需要確定哪個屬性已被更改。這個想法是捕捉多個業務關鍵事件,因此添加到集合中。

收集的主要原因是因爲交換機中的多個屬性類型可能具有相同的事件,而我不想將這些屬性類型觸發兩次。

我希望這可以清除一些東西,如果「說」的解決方案不合適,那就更樂意走上一條新的道路。

在最初的規範中,我強調事件的想法,所以理想情況下需要以最具擴展性的方式進行這項工作。將項目添加到集合中是項目經理的靈感。

問候,

+0

也許最好是對你的問題作出更多的澄清。例如添加代碼以顯示您如何添加事件以及事件集合的確切位置等等。 –

+0

「,例如添加代碼以顯示您如何添加事件以及事件集合的確切含義等等。那麼這就是問題,怎麼樣?我在問我如何創建集合,如何添加到集合以及如何激發集合中的所有元素。 –

+0

這有點令人困惑。你能解釋爲什麼你需要一個「事件集合」嗎?誰會引發這些事件? – Leo

回答

-1

我問我如何創建集合,如何添加到 收集和如何解僱所有集合

我覺得你可以做的你想用什麼來收集Action。這裏是代碼:

//(1)create collection 
List<Action> actions = new List<Action>(); 

switch (e.PropertyName) 
{ 
    case "DateFrom": 
     //(2)add to the collection 
     actions.Add(new Action(() => {/* What you want to do in this case */ })); 

    //.... 
} 

//(3)fire all those in the collection 
foreach (var item in actions) 
{ 
    item(); 
} 
+0

@downvoter考慮留言並說出原因 –

相關問題