Я хочу показать список, но страница пуста - PullRequest
1 голос
/ 07 февраля 2020

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

Идея состоит в том, чтобы получить список имен в SessionsList.cs, который будет обновляться автоматически при изменении ObservableCollection. Я не получаю никаких ошибок, но страница, на которой должен отображаться список, пуста

App.xaml.cs

using Xamarin.Forms;

namespace BetterApp
{
    public partial class App : Application
    {
        public static bool IsUserLoggedIn { get; set; }
        public App()
        {    
            if (!IsUserLoggedIn)
            {
                MainPage = new NavigationPage(new MainPage());
            }
            else
            {
                MainPage = new NavigationPage(new SessionsList());
            }
        }

        protected override void OnStart()
        {
        }

        protected override void OnSleep()
        {
        }

        protected override void OnResume()
        {
        }
    }
}

MainPage.xaml.cs

using System.ComponentModel;
using Xamarin.Forms;

namespace BetterApp
{
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

            var lblUser = new Label
            {
                Text = "Username:"
            };
            var txtUser = new Entry
            {
                Placeholder = "Enter username"
            };
            var lblPass = new Label
            {
                Text = "Password:"
            };
            var txtPass = new Entry
            {
                Placeholder = "Enter password",
                IsPassword = true
            };
            var btnLogin = new Button
            {
                Text = "LOGIN"
            };            
            Content = new StackLayout
            {
                Padding = 30,
                Spacing = 10,
                Children = { lblUser, txtUser, lblPass, txtPass, btnLogin }
            };

            btnLogin.Clicked += async (sender, e) =>
            {
                if (Login.login(txtUser.Text, txtPass.Text))
                {
                    App.IsUserLoggedIn = true;
                    Navigation.InsertPageBefore(new SessionsList(), this);
                    await Navigation.PopAsync();
                }
                else
                {
                    await DisplayAlert("Error", "Bad login details", "OK");
                }
            };
        }
    }
}

SessionsList.cs

using System.Collections.ObjectModel;
using Xamarin.Forms;

namespace BetterApp
{
    class SessionsList : ContentPage
    {
        ObservableCollection<Sessions> session = new ObservableCollection<Sessions>();
        public SessionsList()
        {
            App.IsUserLoggedIn = false;

            var list = new ListView();            
            list.ItemsSource = session;
            var btnRefresh = new Button
            {
                Text = "REFRESH"
            };
            btnRefresh.Clicked += (sender, e) =>
            {
                UpdateSessions();
            };
        }

        public void UpdateSessions()
        {
            session.Add(new Sessions { name = "Rob Finnerty" });
        }
    }
}

Sessions.cs

namespace BetterApp
{
    class Sessions
    {
        public string name { get; set; }
    }
}

Мне не хватает деталей, пожалуйста, дайте мне знать, чтобы улучшить мой вопрос:)

1 Ответ

3 голосов
/ 07 февраля 2020

вы создаете элементы пользовательского интерфейса, но ничего с ними не делаете

var list = new ListView();            
list.ItemsSource = session;
var btnRefresh = new Button

вам нужно добавить их на страницу, чтобы они были видны. Поскольку у вас есть более одного элемента, вам нужно использовать Layout некоторого типа

var layout = new StackLayout();
layout.Children.Add(list);
layout.Children.Add(btnRefresh);

// add to the page's Content
this.Content = layout;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...