Как (правильно) обновить M в MVVM приложения WPF?
Пройдя сериюЭдвард Тангей 'с вопросами, не связанными с использованием MVVM для приложения WPF, которые можно найти в Связанной боковой панели егоТолстые модели, худые ViewModels и немые виды, лучший подход MVVM?, Я немного смущен его окончательным заявлением WPF вБольшие умные ViewModels, тупые Views и любая модель, лучший подход MVVM?
этоM (модель) - класс клиента:
//model
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime TimeOfMostRecentActivity { get; set; }
public static Customer GetCurrentCustomer()
{
return new Customer
{ FirstName = "Jim"
, LastName = "Smith"
, TimeOfMostRecentActivity = DateTime.Now
};
}
}
который возвращает текущего пользователя. Вид, потому что он возвращает дубликаты вновь созданного "ток" Пользователь ...
Но где Мданные хранятся и обновляются в случае необходимости?
Предположим, я хочу изменить модельтекущий пользовательFirstName
к "Геннадий "?
Я добавил кнопку для обновления модели с помощью этого обработчика события нажатия кнопки:
private void button1_Click(object sender, RoutedEventArgs e)
{
}
стремясь изменить модель "s данные из него, которые будут отражены в GUI.
Как я могу сделать это, нажав эту кнопку ... извините, поместив код в это?button1_Click()
Или что-то не так с моим желанием сделать это?
Затем. как правильно обновить / изменить M в MVVM?
Обновить:
Кажется, все ответы относятся к тому, что я должен вносить изменения не в M, а в VM.
Хотя я'мы специально спрашивали оссылка на реализацию M-V-VM с:
public CustomerViewModel()
{
_timer = new Timer(CheckForChangesInModel, null, 0, 1000);
}
private void CheckForChangesInModel(object state)
{
Customer currentCustomer = CustomerViewModel.GetCurrentCustomer();
MapFieldsFromModeltoViewModel(currentCustomer, this);
}
public static void MapFieldsFromModeltoViewModel
(Customer model, CustomerViewModel viewModel)
{
viewModel.FirstName = model.FirstName;
viewModel.LastName = model.LastName;
viewModel.TimeOfMostRecentActivity = model.TimeOfMostRecentActivity;
}
Так, например, при реализации кодаот Адольфо Пересаответ изменения, 'TextBox
содержание изменено с "Джим" к "Геннадий» только на период, установленный в._timer = new Timer(CheckForChangesInModel, null, 0, 1000);
Вся логикаупомянутая мной M-V-VM в подходе WPF таков, что это "М" должно быть обновлено, чтобы VM зафиксировала эти изменения, но не "VM».
Более того, я не могу понять, если внести изменения вВ.М. как они могут быть отражены в М еслиВ.М. знает о М но - не наоборот - модель не знает о ViewModel).