基本上,我的图像的高度分别为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中进行更新。
我该如何实现?我能以某种方式监听PropertyChanged
中Height
的{{1}}事件,然后触发相应的事件吗?
我想避免触发MUpPX
中的事件,因为可能/将存在其他派生属性,并且如果我必须照顾“父级”中的每个派生属性,那将不是一个很干净的抽象。 “。
答案 0 :(得分:1)
无论何时要更新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)));
}
}
}