Обновление MVVM элемента представления
-
20-12-2019 - |
Вопрос
У меня есть приложение, работающее по схеме 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.