道歉標題有誤導之嫌,但我不知道確切地稱之爲什麼,我這裏尋找。我有以下「主要」類:事件處理 - 發件人爲主要類別中,如果
public class Entity : INotifyPropertyChanged
{
public string Name { get; set; }
public EntityRole Role { get; set; }
public EntityStats Stats = new EntityStats();
//Other stuff....
}
而且......子類? (合適的名字,將不勝感激這個)...叫EntityStats
:
public class EntityStats : INotifyPropertyChanged
{
public int CurrentHealth
{
get { return _currentHealth; }
set
{
if (value != _currentHealth)
{
_currentHealth = value;
OnPropertyChanged("CurrentHealth");
}
}
}
//other properties...
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
凡Entity
對象包含EntityStats
類型的屬性。
在我的代碼的另一邊,我註冊一個Entity
對象監聽PropertyChanged
事件:
public void RegisterEntity(Entity entity)
{
entity.Stats.PropertyChanged += entity_PropertyChanged;
}
void entity_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "CurrentHealth")
{
Message.Write("CurrentHealth property changed!");
DeathCheck((Entity)sender);
}
}
我遇到的問題與DeathCheck((Entity)sender);
- 因爲CurrentHealth
OnPropertyChanged
事件是部分EntityStats
類,該對象的類型爲EntityStats
,其中只包含我需要的部分數據。
我如何確定Entity
對象sender
所屬的或我怎麼能重構這個代碼,以便當內EntityStats
變化的特性,在Entity
類引發的事件?
有很多方法可以做到這一點。在entitystat中創建父屬性並存儲實體對象。這樣你可以訪問entitiy屬性。不過,根據您的要求,我認爲從實體而不是entitystat公開事件會很有用。 – XtremeBytes
@XtremeBytes感謝您的評論。你能否提供一個答案來展示如何從「實體」類暴露事件?這樣做對我來說最有意義,但是我不太清楚如何實現它,因爲CurrentHealth是EntityStats的一個屬性。 – levelonehuman