Как отправить данные из C# в файл xaml через TabbedPage

#c# #xamarin

Вопрос:

У меня есть приложение Tabbedpage, которое должно отправлять/передавать переменную «количество» (количество кликов) в MianPage.xaml.cs на страницу 1.xaml. Мне нужна метка на странице 1.xaml, чтобы показать «количество». Пожалуйста, дайте мне вашу идею, как я могу это исправить.

ниже приведена главная страница.xaml, которая представляет собой только текст и кнопку :

 <TabbedPage 
      xmlns:local="clr-namespace:bottomtest;assembly=bottomtest"
      x:Class="buttontest.MainPage">
        
      <ContentPage Title="MainPage" >
            <StackLayout>
                <Label Text="Welcome to MainPage1 !" 
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />
   
               <Button Text="Push Me" Clicked="Button_Clicked" />
               
            </StackLayout>
                
        </ContentPage>
        <NavigationPage Title="Page1" >
            <x:Arguments>
                <local:Page1 />
            </x:Arguments>
        </NavigationPage>  
</TabbedPage>
 

и главная страница.xaml.cs, и куда я хочу отправить «количество», приведены ниже:

 namespace buttontest
{
    public partial class MainPage : TabbedPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        int count = 0;
        void Button_Clicked(object sender, System.EventArgs e)
        {
            count  ;
            ((Button)sender).Text = $"You Pushed {count} times.";
            // something here that send "count" to Page1.xaml 
            // like NI.Text = String.Format("${0:.##}", count);
        }        
    }
}
 

Page1.xaml-это просто ярлык для отображения «количества».:

 <ContentPage 
             x:Class="bottomtest.Page1"
             Title="Page1">
 
        <StackLayout>
          
                <Label Text="PAGE 1 here"
               FontSize="Large"/>
        
            <Label Text="$0.0"
                   x:Name="NI"
                   HorizontalOptions="CenterAndExpand"></Label>
    </StackLayout>
</ContentPage>
 

Страница 1.xaml.cs находится ниже

 namespace buttontest
{
    public partial class Page1 : ContentPage
    {
        public Page1()
        {
            InitializeComponent();          
        }
    }
}
 

Ответ №1:

Вы можете использовать MessageCenter для передачи значений.

Вот код страницы с вкладками 1:

 public partial class TabbedPage1: TabbedPage
 {    
     public TabbedPage1()
     {
         InitializeComponent();
     }
     public int count {get; set;}
     private void Button_Clicked(object sender, EventArgs e)
     {
         count  ;
         ((Button)sender).Text = $"You Pushed {count} times.";
         MessagingCenter.Send<Object,int>(this, "Hi", count);
     }
 }
 

Вот код страницы 1:

 public partial class Page1: ContentPage
 {
     public Page1()
     {
         InitializeComponent();
         MessagingCenter.Subscribe<object, int>(this, "Hi", (sender, res) =>
         {
             NI.Text = Convert.ToString(res);
         });
     }
 }
 

Вот скриншот страницы:

введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. Спасибо, что это работает. Могу ли я отправить несколько переменных (все двойные) через центр сообщений?

2. Вы можете получить более подробную информацию по этой ссылке ( docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… )