Как обновить привязку при изменении под-свойства ViewModel в WPF - PullRequest
0 голосов
/ 17 октября 2018

У меня несколько раз возникал вопрос, но я так и не понял, как его правильно решить.

У меня есть объект 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);
    }
}

В xaml этой ViewModel у меня есть 2 разных подэлемента управления, один отображает направление, другой - настраиваемое поле, редактирующее точное значение?Orientation.RadialAngle (когда парень нажимает на Center (что равно Axial), пользовательское текстовое поле скрывается).

 <local:OrientationEditor SelectedDirection="{Binding Direction}"  />
 <angleEditor:AngleEditor Angle="{Binding Orientation.Angle }"/>

Проблема в том, что мой AngleEditor связан (идолжен быть связан, это используется в каком-то другом случае), на подсубсвойстве, я не вижу, когда я мог бы поднять свойство, измененное для Direction.

Лучшее, что я мог сделать какНа сегодняшний день в моей ViewModel, когда я устанавливаю новую «Ориентацию», я регистрируюсь на событие PropertyChanged вручную, и когда что-то меняется, я обновляю Направление.Но я нахожу это довольно уродливым не очень WPFish.

Есть идеи, как мне это сделать лучше?

...