У меня есть страница и всплывающая страница.
public partial class PageA
{
public PageAViewModel vm;
public PageA()
{
BindingContext = vm = new PageAViewModel();
InitializeComponent();
}
public partial class PageAViewModel
{
public int Field1;
public int Field2;
public int Field3;
public async Task OpenPopup()
{
PopupA popup = new PopupA();
await PopupNavigation.Instance.PushAsync(popup);
}
public void Method1() { }:
И
public partial class PopupA
{
public PopupViewModel vm;
public PopupA()
{
BindingContext = vm = new PopupViewModel();
InitializeComponent();
}
public partial class PopupViewModel
{
// How can I get the value of Field1, Field2 and Field3 here?
// How can I call Method1 here?
передать ссылку на виртуальную машину при создании всплывающего окна
PopupA popup = new PopupA(this);
затем в PopupA
public PopupA(PageAViewModel vma)
{
BindingContext = vm = new PopupViewModel(vma);
InitializeComponent();
}
затем в Попупвиевмодел
public PopupViewModel(PageAViewModel vma)
{
// now this VM has a reference to PageAViewModel
}
обратите внимание, что это не лучший подход к проектированию, и он глубоко связывает эти два класса.
Присоединяюсь к вашим комментариям по поводу соединения. Есть ли у вас какие-либо предложения о том, как это можно решить?
Не могли бы вы проверить эту строку. Я полагаю, вы имеете в виду, что я должен передать ссылку на ViewModel, но здесь вы предлагаете передать ссылку на страницу.
если код, который вы разместили в строке PopupA popup = new PopupA();
, содержится в PageAViewModel
Вы можете сделать это, добавив шаблон проектирования в свой проект. Я использую MVVM Light и добавляю класс ViewModelLocator
для создания одноэлементного шаблона.
https://www.c-sharpcorner.com/article/xamarin-forms-mvvm-viewmodel-locator-using-mvvm-light/
По ссылке и тогда можно написать
var xyz = App.ViewModelLocator.YourViewModel.YourPublicProperty;
Используете ли вы MVVM Light для каждой ViewModel в вашем проекте. Как насчет простого случая, когда BindingContext = vm = new PageAViewModel(); работает. Есть ли какое-то преимущество в использовании MVVM для этого?
Преимущество заключается в том, что ваше управление кодом не нарушает этических норм кодирования при использовании одноэлементного шаблона, в отличие от другого ответа, который является своего рода исправлением, а не решением, которое является масштабируемым, модульным и надежным. stackoverflow.com/questions/5462040/…
Можете ли вы уточнить немного больше. Я пытаюсь дать PopupViewModel ссылку на поля и методы PageAViewmodel.