В настоящее время я работаю над проектом в Xamarin с использованием подхода MVVM. Я изучил основы из разных уроков на YouTube и официальной документации Xamarin. Тем не менее, до сих пор я никогда не видел пример, который обрабатывает этот конкретный вопрос.
Возможно, я неправильно понял некоторую часть того, как следует использовать шаблон MVVM, но если нет, я хотел бы услышать от кого-то иначе, если у них есть какое-то другое решение для этого.
У меня есть базовая c привязка между ViewModel (.cs) и View (.xaml).
Допустим, что «View» - это файл с именем Profile.xaml, и у нас есть:
<Label Text="{Binding Name}" />
, который привязан к «ViewModel», давайте вызовем это ProfileViewModel.cs, который имеет следующее свойство, а также реализует INotifyPropertyChanged:
public string Name {get; set;}
И, конечно, класс "Model", который связывает их вместе с установкой BindingContext (позволяет скажем, он реализует ContentView и должен называться Profile.xaml.cs):
private ProfileViewModel ViewModel;
public Profile() {
BindingContext = ViewModel = new ProfileViewModel();
}
Это сортирует связь между «View» и «ViewModel».
Однако, когда я инициализирую «View» (Profile.xaml), который должен быть привязан к «ViewModel» (ProfileViewModel.cs), это делается посредством инициализации «Model» (Profile.xaml.cs), и я пока не нашел пример того, что показывает хорошую практику, как заполнить ViewModel уже существующими данными.
Как и в примере для этого вопроса, «Имя» может уже существовать в какой-либо базе данных. И здесь мы инициализируем весь профиль, выполнив следующее:
<Profile Name="Napoleon" />
Для этого классу "Модель" (Profile.xaml.cs) также необходимо иметь следующее: public string Name {get; set;}
И передать эту строку «ViewModel», когда установлен BindingContext:
BindingContext = new ProfileViewModel(){
Name = this.Name
}
Однако я сталкивался с ситуациями, когда такого рода уже существующие данные могут поступать асинхронно или после того, как профиль "Модель" был инициализирован. Это привело меня к следующему решению. Реализация свойства set, которое ссылается на соответствующее свойство в «ViewModel».
public string Name {
get => ViewModel.Name;
set => ViewModel.Name = value;
}
Как я уже сказал, это работает для меня, но меня действительно интересуют другие идеи, как это можно решить или, если у меня есть получил шаблон MVVM ужасно неправильно.