Вопрос

У меня есть приложение, работающее по схеме MVVM.Где у меня есть несколько моделей просмотра и представлений.На моей главной странице есть текстовый блок, который я хотел бы обновить информацией из выбранных элементов.

После запуска приложения я вставляю значение из mainviewmodel, чтобы проверить привязку, чтобы здесь все работало.Где код следующий:

<TextBlock Text="{Binding colorOfElement}" Grid.Row="1"/>

Код в mainviewmodel

 private string _colorOfElement;
    public string colorOfElement
    { 
        get
        {
            return _colorOfElement;
        }
        set
        {
            _colorOfElement = value;

            NotifyPropertyChanged("colorOfElement");

        }
    }

......

colorOfElement = "Test";

Это отображается правильно.Когда пользователь затем взаимодействует с элементом, внутри новой модели представления запускается событие. Здесь у меня есть ссылка на модель основного представления, поэтому я могу легко обновить строку colorOfElement.

private MainViewModel mv;
......
    public void MouseDown(ManipulationStartedEventArgs obj)
    {
        FrameworkElement MovingElement = (FrameworkElement)obj.OriginalSource;

        Canvas canvas = FindParentOfType<Canvas>(MovingGear);

        obj.ManipulationContainer = canvas;
        obj.Handled = true;

        testViewModel viewModel = (testViewModel)MovingElement.DataContext;

        mv.colorOfElement = viewModel.model.Color;
    }

когда эта функция выполняется, меня отправляют в mainviewmodel и запускается NotifyPropertyChanged.Но на странице Application.Page, которая показывает представление, я не вижу никаких обновлений переменной, но в коде переменная меняется.Есть идеи по поводу этой проблемы привязки?

ОтвечатьПоскольку я протестировал контекст данных, и все работало, проблема была в моем публичном классе.

     public class MainViewModel : ViewModelBase

Здесь он должен включать интерфейс INotifyPropertyChanged для включения этой функции.Итак, простое решение — добавить это и получить:

     public class MainViewModel : ViewModelBase, INotifyPropertyChanged

Тогда вам пора идти :)

Это было полезно?

Решение

Гарантировать, что:

  • DataContext установлен в правильный экземпляр MainViewModel.
  • MainViewModel реализует интерфейс INotifyPropertyChanged.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top