我有一個死了從INotifyPropertyChanged
繼承的簡單視圖模型。試圖爲這個視圖模型創建一些自動化測試後,我最終覆蓋了Equals()
和GetHashCode()
。我的測試通過了,所以我是一個快樂的露營者。爲什麼重寫GetHashCode()塊INotifyPropertyChanged?
但是,現在我的Windows窗體數據綁定沒有反應,當我的視圖模型中的屬性發生更改時。如果我評論我的GetHashCode()
實現所有預期的工作,除了我的測試。
這是我實現:
public override int GetHashCode()
{
unchecked
{
var hashCode = (_subject != null ? _subject.GetHashCode() : 0);
hashCode = (hashCode * 397)^(_message != null ? _message.GetHashCode() : 0);
hashCode = (hashCode * 397)^
(_body != null ? _body.GetHashCode() : 0);
return hashCode;
}
}
這簡直是對我產生什麼ReSharper的。
爲什麼重寫GetHashCode()
會阻止我的數據綁定拾取我的視圖模型更改,儘管我調用了PropertyChanged
事件?
GetHashCode()和Equals()是否在相同的字段上運行?換句話說,如果Equals()返回true,那麼HashCodes應該是相等的。你能證實情況嗎? – 2013-02-13 18:59:37
我的猜測是被返回的哈希碼每次都是相同的,所以.Net認爲它是相同的對象,並且不會觸發屬性更改的事件。 – 2013-02-13 19:01:06
非常不清楚。什麼數據綁定?用於WinForms的ViewModels?爲什麼測試需要GetHashcode? – 2013-02-13 19:03:49