我有几次这个问题,但从未想出如何正确解决它。
我有一个对象SensorOrientation
,它由一个浮点数和一个布尔值组成:
public class SensorOrientation{
public float? RadialAngle {
get{
//Getting from backingField
}
set{
//Setting the backingField
//Notifying
}
}
public bool IsAxial {
get{
//Getting from backingField
}
set{
//Setting the backingField
//Notifying
}
}
}
在我的ViewModel中,我有一个SensorOrientation
属性,还有一个其他属性,这是一个基本的ViewModel(我有一个位置为9的图形,我必须选择一个位置最接近的图形到RadialAngle中的自定义值)。
所以我创建了一个枚举:
public enum OrientationEditorDirection
{
Unknown,
Center,
Top,
TopRight,
Right,
BottomRight,
Bottom,
BottomLeft,
Left,
TopLeft
}
因此,在我的ViewModel中,当“ RadialAngle”或“ IsAxial”的值更改时,我想更新它:
public class ViewModel{
public SensorOrientation Orientation {
get{
//Getting from backingField
}
set{
//Setting the backingField
//Notifying
}
}
public OrientationEditorDirection Direction {
get=> CallToTheMethodThatComputeTheCorrectDirection();
set => CallToTheMethodThatUpdateTheSensorOrientationValue(value);
}
}
在此ViewModel的xaml中,我有2个不同的子控件,一个显示方向,一个是自定义字段,用于编辑?的确切值。 Orientation.RadialAngle
(当此人单击Center
(等于Axial时,则隐藏了自定义文本框)。
<local:OrientationEditor SelectedDirection="{Binding Direction}" />
<angleEditor:AngleEditor Angle="{Binding Orientation.Angle }"/>
问题在于,由于我的AngleEditor
已绑定(并且必须绑定,在其他情况下使用),在子子属性上,我看不到何时可以提高属性已更改为“方向”。
到目前为止,我能做的最好的事情是,在ViewModel中,当我设置一个新的“方向”时,我手动注册了PropertyChanged
事件,并且当发生变化时,我更新了Direction。但是我发现这不是非常丑陋的WPFish。
有什么主意我可以做得更好吗?