WPF中ViewModel的子属性更改时如何更新绑定

时间:2018-10-17 11:50:59

标签: c# wpf binding inotifypropertychanged

我有几次这个问题,但从未想出如何正确解决它。

我有一个对象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。

有什么主意我可以做得更好吗?

0 个答案:

没有答案