Page.xaml как модель для других страниц - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в разработке Xamarin. Я надеюсь, что вы можете решить мою проблему в простом режиме.

У меня есть кроссплатформенное приложение, разработанное с помощью Xamarin, и в этом приложении у меня есть page.xaml с меткой. Я использую привязку к page.xaml.cs для текста.

Я хочу использовать page.xaml в качестве модели для дизайна и хочу создавать другие страницы: page2, page3, page4 и т. Д., Используя модель page1, но с привязкой текста page2.xaml.cs, page3.xaml.cs, page4.xaml.cs и т. д.

Итак, гипотетические три приложения таковы:

Pagemodel.xaml (макет всех страниц)

  • Page1.xaml.cs (с макетом pagemodel, но с текстом страницы1)
  • Page2.xaml.cs (с макетом pagemodel, но с текстом страницы2)
  • Page3.xaml.cs (с макетом pagemodel, но с текстом страницы3)

Я хочу это, потому что таким образом, если я хочу изменить дизайн всех страниц, я просто изменяю дизайн pagemodel.

Пожалуйста, еслиВы можете дать мне простое решение или, если у вас есть другая идея, дать мне другое решение для моего вопроса. Спасибо

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Я хочу этого, потому что таким образом, если я хочу изменить дизайн всех страниц, я просто изменяю дизайн pagemodel.

Pagemodel.xaml (макетвсех страниц)

Простой способ сделать это с помощью пользовательского элемента управления. Например, я делаю элемент управления с тремя метками.

     <StackLayout Orientation="Vertical">
    <Label Text="{Binding Name}" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"/>
    <Label Text="{Binding Country}" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"/>
    <Label Text="{Binding Address}" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"/>
  </StackLayout>

ViewModel

public class ViewModel
{
    public string Name { get; set; }
    public string Country { get; set; }
    public string Address { get; set; }
}

Page.xaml.cs (с макетом pagemodel, нотекст страницы)

Тот же способ связывания данных с той же моделью представления.

ViewModel viewModel = new ViewModel()
        {
            Name = "A",
            Address = "A-Address",
            Country = "A-Country"
        };

        this.BindingContext = viewModel;

Использование пользовательского элемента управления

xmlns:local="clr-namespace:PageModelDemo.Views"

<ContentPage.Content>
    <local:Page></local:Page>
</ContentPage.Content>

enter image description here

Вы можете скачать из папки PageModelDemo на Github. https://github.com/WendyZang/Test.git

0 голосов
/ 07 ноября 2019

Вы можете передать BindingContext через конструктор новой страницы или привязать статическую модель к исходной странице и вызвать ее с других страниц

MainPage

        public static YourModel BindingC;

        public MainPage()
        {
            InitializeComponent();


            this.BindingContext = YourClass;
            YourModel = YourClass;


        }

SecondPage

 public SecondPage()
        {
            InitializeComponent();


            this.BindingContext = MainPage.YourModel;



        }

Другая альтернатива

SecondPage

public SecondPage(BindingC = null)
        {
            InitializeComponent();

            if(BindingC != null)
               this.BindingContext = BindingC;


        }

Главная страница

public MainPage()
        {
            InitializeComponent();


            Navigation.PushModalAsync(new SecondPage(your binding context));


        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...