[英]Prism WPF Event Aggregator Event Class Alternative
我正在開發一個具有30多個屬性的項目,這些屬性正在使用數據綁定不斷更新。 我獲取服務器發送的新值的方式是使用事件聚合器,它會更新屬性。 到目前為止,這就是我的工作方式
活動類
public class Zone1TempEvent : PubSubEvent<int>
{
}
屬性
private int _zone1Temp;
public int Zone1Temp
{
get { return _zone1Temp; }
set { SetProperty(ref _zone1Temp, value); }
}
訂閱
eventAggregator.GetEvent<Zone1TempEvent>().Subscribe(tempZone1Update);
方法
private void tempZone1Update(int value) { Zone1Temp = value; }
發布
private void checkResponsability(ItemValueCallback itemValue)
{
switch ((string)itemValue.ClientHandle)
{
case "Zone1_Temp":
int Zone1Temp = Int32.Parse((string)itemValue.Value);
_eventAggregator.GetEvent<Zone1TempEvent>().Publish(Zone1Temp);
break;
}
}
但是,我無法想象這樣做30次。 我正在尋找替代方案。 我想避免必須為每個事件創建一個類以及為每個屬性創建一個方法。 是否可以有一個名為UpdatePropertyEvent的通用類,並使用它來實現。 還是可以通過枚舉此線程來激發靈感? 在事件聚合器中將枚舉與事件類混合
您的服務可以使用IPropertyChanged
(而不是使用EventAggregator
來實現(根據情況,從服務返回的模型可以)。 這樣,您只需要對一個事件做出反應。
同樣,您可以只發布一個包含兩個字符串值的事件,例如class ServerUpdatedEvent : PubSubEvent<PropertyValuePair>
然后進行解析並分配給視圖模型中的屬性。
例:
// ...service...
private void checkResponsability(ItemValueCallback itemValue)
{
_eventAggregator.GetEvent<ServerUpdatedEvent>().Publish(new PropertyValuePair((string)itemValue.ClientHandle,(string)itemValue.Value);
}
// ...view model or intermediate service...
private void OnServerUpdate(PropertyValuePair data)
{
switch (data.Property)
{
case "Zone1_Temp": Zone1Temp = int.Parse(data.Value); break;
}
}
如果您的屬性可以像事件一樣命名,或者將屬性放在事件上,則可以使用反射來查找傳入事件的屬性。 但是,反射速度很慢,因此,如果您有很多事件,則可能需要某種類型的緩存。
喜歡的東西, 這可能會為你工作了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.