首页 > 解决方案 > 我想显示一个列表,但页面是空的

问题描述

我是 Xamarin 的新手,尝试了 2 个小时后,我无法让我的页面正常工作......

这个想法是在 SessionsList.cs 中获取一个名称列表,如果 ObservableCollection 更改,它将自动更新,我没有收到任何错误,但应该显示列表的页面为空

应用程序.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");
                }
            };
        }
    }
}

会话列表.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" });
        }
    }
}

会话.cs

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

我遗漏了任何细节,请告诉我以改进我的问题:)

标签: c#xamarinxamarin.forms

解决方案


您正在创建 UI 元素,但没有对它们做任何事情

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

您需要将它们添加到页面中,以便它们可见。因为您有多个元素,所以您需要使用Layout某种类型的 a

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

// add to the page's Content
this.Content = layout;

推荐阅读