簡體   English   中英

當父屬性更改時,為派生屬性觸發 PropertyChanged

[英]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}"

但是,當更改HeightPXHeightMM ,顯然MUpPX更改,但不會觸發PropertyChanged事件,因此不會在 GUI 中更新。

我怎樣才能做到這一點? 我可以以某種方式在MUpPXMUpPX HeightPropertyChanged事件,然后觸發相應的事件嗎?

我想避免從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM