更新:我的問題最初是針對格式問題以及來自多個其他屬性的「派生」屬性。我認爲這是相同的情況,但正如你從Fabios回答中看到的那樣,情況並非如此。我已經改變了這個問題一點,要明確說明它不是只是格式。INotifyPropertyChanged是否可以影響派生函數
我正在使用單向數據綁定的WinForms和INotifyPropertyChanged來更新表單。但我無法弄清楚它是如何影響派生函數的。例如可以說我有一個返回的價格爲十進制的函數:
public decimal price
{
get { return _price; }
set
{
// Set price and notify that it was changed
_price = value;
InvokePropertyChanged(new PropertyChangedEventArgs("price");
}
}
另一個特性是負責貨幣代碼,這也可以改變:
public decimal currency
{
get { return _currency; }
set
{
_currency = value;
InvokePropertyChanged(new PropertyChangedEventArgs("currency");
}
}
當價格或貨幣被改變(設置),屬性改變功能被調用。不過,我希望在我的GUI中顯示它之前,將此值格式化並使用貨幣代碼。所以,我把我的數據綁定到派生功能:
public string formattedPrice
{
get { return string.Format("{0:n0} {1}", price, currency)
}
將如何改變price
或currency
影響formattedPrice
?顯然我一直在做自己的一些測試,但我似乎無法找到邏輯?該InvokepropertyChanged
函數的定義是這樣的:
public event PropertyChangedEventHandler PropertyChanged;
public void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, e);
}
有_many_方式來處理這一點。請參閱標記的重複選項。就個人而言,我更願意保持我的INPC屬性完全免費的自定義邏輯。相反,我使用一個基礎實現,它允許setter掛鉤回調,並在該回調中處理屬性特定的行爲。然後就像你正在談論的東西,在這樣的回調只是設置「派生」屬性(一個不幸的單詞選擇恕我直言,鑑於「派生」在OOP中有一個特定的,完全不相關的意義)到一個新的價值。是的,有更多的後臺字段,但代碼更簡單。 –
@PeterDuniho - 我認爲這個問題的具體情況更多地與格式化值有關。你提供的「相關」答案將導致OP和未來的讀者向錯誤的方向發展。 – Fabio
所以這就是從零開始到火箭科學:-)。我對你的意思是「讓我的INPC屬性完全免費定製邏輯」有點困惑。我對C#還是有點新鮮,所以我必須承認,我並不確定我的InvokePropertyChanged函數是如何工作的。你可以在代碼中顯示它嗎? – Noceo