SelectedItem в TabbedPage.xaml не работает Xamarin.Form

Всем привет. Добрый день. Вкладки созданы в xaml, я предпочитаю xaml, потому что у меня есть логин в коде xaml. Мой код

Tab.xaml

<TabbedPage 
        xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:local="clr-namespace:FormsSample.Views;assembly=FormsSample"
        x:Class="FormsSample.Views.LoginPage"
        x:Name="TbPage">
     <TabbedPage.Children>
        <ContentPage x:Name="TbLog" Title="Login">
        </ContentPage>
        <ContentPage x:Name="TbSch" Title="Schedule">
        </ContentPage>
        <ContentPage x:Name="TbLis" Title="Customers">
        </ContentPage>
        </TabbedPage.Children>   
</TabbedPage>

Tab.xaml.cs

   namespace FormsSample.Views
   {
    public partial class LoginPage : TabbedPage 
    {

       private readonly TabbedPage _tbPage;
       private readonly ContentPage _tbList;
       private readonly ContentPage _tbLogn; 


       public LoginPage()
       {
        InitializeComponent ();
        _tbPage = this.FindByName<TabbedPage>("TbPage");
        _tbList = this.FindByName<ContentPage>("TbLis");
        _tbLogn = this.FindByName<ContentPage>("TbLog");
        RunTime();
        }

        private void RunTime()
        {
               _tbPage.CurrentPage = _tbLogn; 
           if (_tbPage.SelectedItem == _tbPage.Children[2])
           {
              DisplayAlert("Tab", "Hello World", "OK");
           }
         }

       }

     }

изменение на

  _tbPage.SelectedItem == _tbList 

Аналогично ничего не происходит, как это решить? большое спасибо.


person jake talledo    schedule 03.08.2016    source источник
comment
Извините, но мне не очевидно, чего вы пытаетесь достичь? Не могли бы вы уточнить это?   -  person Gerald Versluis    schedule 03.08.2016
comment
@GeraldVersluis, чего я пытаюсь достичь, - это различие между ПОЛЬЗОВАТЕЛЕМ и администратором, скажем, если пользователь получит доступ к этому списку, появится всплывающее сообщение, скажем, у вас нет прав для доступа к списку.   -  person jake talledo    schedule 04.08.2016
comment
Может лучше другой подход? Почему бы вообще не удалить вкладку, если пользователь не может получить к ней доступ?   -  person Gerald Versluis    schedule 04.08.2016
comment
@GeraldVersluis есть вкладки, к которым у пользователя есть доступ: D только одна вкладка не разрешена пользователю.   -  person jake talledo    schedule 04.08.2016
comment
Итак, проверьте права при появлении страницы и выполните Children.Remove(_tbLogn);, если это та вкладка, на которую вы не хотите давать никаких прав. Или переверните его и добавьте только тогда, когда у пользователя действительно есть право.   -  person Gerald Versluis    schedule 04.08.2016
comment
@GeraldVersluis спасибо, но я уже решил это, я опубликовал решение: D еще раз спасибо   -  person jake talledo    schedule 04.08.2016


Ответы (2)


Это может быть не модно, но это работает для меня: D

        this.CurrentPageChanged += (o, e) => 
        {
           var i = this.Children.indexOf(this.CurrentPage); 
            if(i == 1 && UsrType == 2)
            {
                 DisplayAlert("Admin", "Administrator Privilege required!", "OK");
                 this.CurrentPage = _tbLog;
            }
        };
person jake talledo    schedule 04.08.2016

Сначала я установил SelectedItem в null, прежде чем установить его на страницу, которую я хотел показать.

person Ian Warburton    schedule 10.07.2018
comment
Ив давно забросил форму и сейчас работает на Java Android. - person jake talledo; 13.07.2018
comment
Да, похоже, что установка значения null была необходима, чтобы вызвать что-то для фактического переключения вкладки. - person Jamin; 20.05.2019