Mvvm light view не обновляет свойство привязки

Я использую MVVM Light. Моя модель наследуется от ObservableObject MVVM Light. Модель обладает свойством X

    public float X
    {
        get
        {
            return x_;
        }
        set
        {
            Set<float>(() => this.X, ref x_, value);
        }
    }

В моей ViewModel у меня есть свойство X

        public float X
        {
            get
            {
                myModel.X;
            }
        }

У My View есть метка, в которой контент привязывается к свойству ViewModel X.

(DataContext установлен на ViewModel)

Когда значение свойства X в модели обновляется из кода, метка в представлении никогда не обновляется.

Вопрос: каков рекомендуемый способ убедиться, что представление правильно отражает обновленное значение?

(Если я создаю свойство в своей ViewModel, которое возвращает модель, я могу привязать директиву к Model.X в моем представлении. Но я хочу, чтобы мое представление привязывалось к ViewModel, а не напрямую к модели)

Можете ли вы опубликовать свой код XAML?

Pavel Levchuk 10.08.2018 17:27

Когда myModel.X запускает свое событие PropertyChanged, это не запускает автоматически событие PropertyChanged ViewModel. Сделайте MyModel общедоступным свойством в ViewModel и привяжите к MyModel.X.

Clemens 10.08.2018 17:29

Хорошо, так что это, в конце концов, правильное решение. Я должен сделать полную модель доступной для привязки к представлению, я надеялся, что есть способ ограничить привязки только к классу ViewModel.

Johan 10.08.2018 17:36

Если нет лучшего способа, пожалуйста, не стесняйтесь размещать свой комментарий в качестве ответа, и я поставлю его на ответ, если я не найду лучшее решение.

Johan 10.08.2018 17:50
0
4
296
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда myModel.X запускает событие PropertyChanged, это не запускает автоматически PropertyChanged ViewModel.

Более того, если ваш класс модели уже реализует INotifyPropertyChanged, нет необходимости дублировать свойство X в классе ViewModel.

Просто превратите член myModel в общественную собственность

public class ViewModel
{
     public Model MyModel { get; set; } 
}

и привязать к нему с помощью {Binding MyModel.X}.

Другие вопросы по теме