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";
}
}