Страницы

Поиск по вопросам

суббота, 15 июня 2019 г.

wpf MVVM как изменить состояние view через viewmodel?

Логика за изменение стиля кнопки, текста и еще кучи всего находится в View.cs в отдельных методах
Но эти методы необходимо вызвать из ViewModel.
Как организовать, чтобы из ViewModel можно было вызвать метод на изменение состояния View?


Ответ

Смотрите.
Если вам нужно поменять данные, вы просто меняете их в VM, и всё, View подхватывает их через привязку.
Если вам нужно поменять визуальное состояние, то вы делаете это не в VM, а во View.
Если вам нужно поменять визуальное состояние в ответ на изменённые данные, обычно делают так: вычисление визуального состояния делают через конвертер, и применяют его.
Пример: пусть вам нужно цвет фона менять в зависимости от значения. Для значений от 1 до 3 красный, от 4 до 10 жёлтый, больше зелёный. Делаем так:
Конвертер:
class ButtonColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var note = (int)value; var color = note <= 3 ? Colors.Red : note <= 10 ? Colors.Yellow : Colors.Green; return new SolidColorBrush(color); }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
XAML:

Комментариев нет:

Отправить комментарий