C# MVVM Как обновить строку представления модели из модели

Я действительно новичок в mvvm и wpf в C# и застрял на некоторых очень простых вещах. В этом примере я использую Fody.PropertyChanged. У меня есть базовая модель представления, которая содержит строку с именем Test, которая связана с текстовым блоком.

 public class Model : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { };

        public string Test { get; set; }
    }

Затем в отдельном файле и классе с именем Data у меня есть простая функция, которая увеличивает int и преобразует его в строку.

public class Data
    {
        public static int i = 0;
        public static string IncTest { get; set; }
        public static void Inc()
        {
            i++;
            IncTest = i.ToString();
        }
    }

Как обновить переменную Test внутри viewmodel при вызове функции Inc()? Например, при нажатии кнопки

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new Model();
        Data.Inc();
    }

    private void Increment_Click(object sender, RoutedEventArgs e)
    {
        Data.Inc();
    }

1 ответ

Решение

В MVVM модель не обновляет модель представления, фактически она противоположна. Модель представления обновляет свойства модели.

Вот пример.

МОДЕЛЬ:

public class Model
{
    public string Test
    {
        get;
        set;
    }
}

Посмотреть модель:

public class ViewModel : INotifyPropertyChanged
{
    private Model _model;

    public string Test
    {
        get
        {
            return _model.Test;
        }
        set
        {
            if(string.Equals(value, _model.Test, StringComparison.CurrentCulture))
            {
                return;
            }
            _model.Test = value;
            OnPropertyChanged();
        }
    }

    public ViewModel(Model model)
    {
        _model = model;
    }

}

Ваши виды будут привязаны к вашим моделям.

ОБНОВЛЕНИЕ: Что касается вашего вопроса

public class SomeClass
{
    public static void Main(string [] args)
    {
        Model model = new Model();
        ViewModel viewModel = new ViewModel(model);

        //Now setting the viewmodel.Test will update the model property
        viewModel.Test = "This is a test";
    }
}
Другие вопросы по тегам