[英]Fire PropertyChanged for derived properties when parent property changes
基本上,我有一個高度為 PX 和 MM(用於打印)的圖像。 作為“派生”屬性,我有 µm / px 值:
public int HeightPX { get { return _HeightPX; } private set { _HeightPX = value; RaisePropertyChanged(); }
public int HeightMM { get { return _HeightMM; } set { _HeightMM = value; RaisePropertyChanged(); }
public double MUpPX { get {return HeightPX != 0 ? HeightMM * 1000 / HeightPX : 0; } }
所有這些都通過綁定顯示在 WPF 文本框中。
Text="{Binding ImageThing.MUpPX, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
但是,當更改HeightPX
或HeightMM
,顯然MUpPX
更改,但不會觸發PropertyChanged
事件,因此不會在 GUI 中更新。
我怎樣才能做到這一點? 我可以以某種方式在MUpPX
中MUpPX
Height
的PropertyChanged
事件,然后觸發相應的事件嗎?
我想避免從Height
觸發事件,因為可能/將會有其他派生屬性,如果我必須照顧“父”屬性中的每個派生屬性,這將不是一個非常干凈的抽象。
每當您想要更新 UI 時,您都應該調用RaisePropertyChanged(nameof(MUpPX))
。
如果您不想在Height*
屬性的設置器中執行此操作,則可以在您的RaisePropertyChanged
方法中執行此操作,例如:
public void RaisePropertyChanged([CallerMemberName]string caller = null)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(caller));
if (caller == nameof(HeightPX) || caller == nameof(HeightMM))
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(MUpPX)));
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.