как передать параметр со страницы авторизации в форму навигации xamarin - PullRequest
0 голосов
/ 05 июня 2018

App.cs

public App()
        {
            InitializeComponent();



            MainPage = new NavigationPage(new login());


        }

login.cs

private void Button_Clicked(object sender, EventArgs e)
        {
             Navigation.PushAsync(new MainPage(test.Text));

        }

mainpage.cs

public MainPage (идентификатор строки) {

    InitializeComponent();

    menuList = new List<MasterPageItem>();


    var page1 = new MasterPageItem() { Title = "Item 1", Icon = "itemIcon1.png", TargetType = typeof(TestPage1) };
    var page2 = new MasterPageItem() { Title = "Item 2", Icon = "itemIcon2.png", TargetType = typeof(TestPage2) };
    // Adding menu items to menuList
    menuList.Add(page1);
    menuList.Add(page2);



    navigationDrawerList.ItemsSource = menuList;

    // Initial navigation, this can be used for our home page
    Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(TestPage1)));
}


private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
{

    var item = (MasterPageItem)e.SelectedItem;
    Type page = item.TargetType;

    Detail = new NavigationPage((Page)Activator.CreateInstance(page));
    IsPresented = false;
}

У меня есть страница входа, когда я нажимаю на кнопку входа, она генерирует идентификатор, я хочу отправить этот идентификатор на главную страницу, что я уже сделал.Теперь с главной страницы я хочу отправить этот идентификатор на страницы, например, если я нажму на страницу 1, главная страница отправит этот идентификатор на страницу 1, так что в основном мне нужно отправить идентификатор с главной страницы на все страницы, кто-нибудь поможет с этим, что делатьв mainpage.cs когда я нажимаю на страницу, она отправляет идентификатор на эту страницу?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Есть много способов сделать это ... Если все ваши страницы должны иметь доступ к этому параметру 'Id', я бы сделал помощник по навигации (статический или зарегистрированный в вашем сервисном контейнере).Вот интерфейс службы, который я мог сделать:

public interface NavigationHelper
{
    ///
    /// To call from your application login page
    ///
    public void RegisterNavigationId(string currentSessionNavId);

    ///
    /// To access the 'Id' (without changing it) from everywhere you want
    ///
    public NavigationId{ get; }
}

Таким образом, каждая страница вашего приложения могла легко получить доступ к этому помощнику, как мы уже говорили:

  • с экземпляром статического помощника, например: NavigationHelper.Instance.Id
  • или путем добавления вашего вспомогательного класса в ваши представления или модели представления (в зависимости от того, где вы хотите перемещаться).

Этот параметр также может быть частьюкласса "settings", если он никогда не изменится во время сеанса ...

Или последняя идея для вас, вы можете наследовать все свои страницы от одной абстрактной страницы, для которой в конструкторе требуется 'Id'..

Как хочешь!

0 голосов
/ 05 июня 2018

Если у вас есть свойство / значение, которое должно быть общедоступным в области приложения (на любом экране), имеет смысл «сохранить» его в одном месте.Это может быть публичная собственность в пределах Application класса. Свойства Dicitonary , свойство MasterDetailPage, SQL и т. Д. Зависит от ваших потребностей.

Передача того же свойства from main page to all page просто не имеет смысла.

0 голосов
/ 05 июня 2018

Вы можете использовать это в OnMenuItemSelected:
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType, Tempid));

mainpage.cs

string Tempid;
public MainPage(string id) {

InitializeComponent();
Tempid=id;
menuList = new List<MasterPageItem>();


var page1 = new MasterPageItem() { Title = "Item 1", Icon = "itemIcon1.png", TargetType = typeof(TestPage1) };
var page2 = new MasterPageItem() { Title = "Item 2", Icon = "itemIcon2.png", TargetType = typeof(TestPage2) };
// Adding menu items to menuList
menuList.Add(page1);
menuList.Add(page2);



navigationDrawerList.ItemsSource = menuList;

// Initial navigation, this can be used for our home page
Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(TestPage1)));
}


private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
{

var item = (MasterPageItem)e.SelectedItem;
Type page = item.TargetType;

 Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType, Tempid));
IsPresented = false;
}

Надеюсь, что это может решить вашу проблему.

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