【问题标题】:Xamarin Forms ListView text not displayedXamarin Forms ListView 文本未显示
【发布时间】:2017-12-12 08:49:47
【问题描述】:

我是 Xamarin 表单的新手,我正在学习 Xamarin 表单的官方教程。在使用以下链接的 Phoneword 项目学习导航时 https://developer.xamarin.com/guides/xamarin-forms/getting-started/hello-xamarin-forms-multiscreen/quickstart/

列表视图文本未出现。请帮帮我!

CallHistoryPage.xaml:这里有列表视图。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:App1;assembly=App1"
             x:Class="App1.CallHistoryPage"
             Title="Call History">
    <ContentPage.Padding>
        <OnPlatform x:TypeArguments="Thickness">
            <On Platform="iOS" Value="20, 40, 20, 20"/>
            <On Platform="Android" Value="20"/>
        </OnPlatform>
    </ContentPage.Padding>
    <StackLayout>
        <ListView ItemsSource="{x:Static local:App.PhoneNumbers}" />
    </StackLayout>
</ContentPage>

MainPage.xaml.cs:SourceItem 值在此类中更新。

namespace App1
{
    public partial class MainPage : ContentPage
    {

        string translatedNumber;

        public MainPage()
        {
            InitializeComponent();
        }

        void OnTranslate(object sender, EventArgs e)
        {
            translatedNumber = PhonewordTranslator.ToNumber(phoneNumberText.Text);
            if (!string.IsNullOrWhiteSpace(translatedNumber))
            {
                callButton.IsEnabled = true;
                callButton.Text = "Call " + translatedNumber;
            }
            else
            {
                callButton.IsEnabled = false;
                callButton.Text = "Call";
            }
        }

        async void OnCall(object sender, EventArgs e)
        {
            if (await this.DisplayAlert(
                    "Dial a Number",
                    "Would you like to call " + translatedNumber + "?",
                    "Yes",
                    "No"))
            {
                var dialer = DependencyService.Get<IDialer>();
                if (dialer != null)
                {
                    App.PhoneNumbers.Add(translatedNumber);
                    callHistoryButton.IsEnabled = true;
                    dialer.Dial(translatedNumber);
                }
            }
        }

        async void OnCallHistory(object sender, EventArgs e)
        {
            await Navigation.PushAsync(new CallHistoryPage());
        }

    }
}

App.xaml.cs:列表视图的源项在此类中

namespace App1
{
    public partial class App : Application
    {

        public static IList<string> PhoneNumbers { get; set; }

        public App()
        {
            InitializeComponent();

            PhoneNumbers = new List<string>();
            MainPage = new NavigationPage(new MainPage());
        }

        protected override void OnStart()
        {
            // Handle when your app starts
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }
}

更多详情请点击上面添加的链接。遵循相同的教程。

【问题讨论】:

  • 请向我们展示您的代码!如果我们唯一能做的就是猜测问题,您希望我们如何提供帮助...
  • 添加了代码请帮助我。 @FelixD。

标签: xamarin xamarin.forms


【解决方案1】:

你忘了'告诉'ListView要显示什么。

<ListView ItemsSource="{x:Static local:App.PhoneNumbers}" />

创建一个带有空单元格的ListView,因此它们不显示任何内容。您必须设置 ListView.ItemTemplate 才能显示任何内容

<ListView ItemsSource="{x:Static local:App.PhoneNumbers}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextCell Text="{Binding .}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

DataTemplate 中的BindingContext 将是来自App.PhoneNumbers 的相应项目。由于项目是裸strings,我们绑定到.,它指的是绑定的元素本身。

在 Xamarin.Forms 中查看 here 以获取 ListViews。

【讨论】:

    【解决方案2】:

    您尚未在 PhoneNumbers 列表中添加任何号码。在 PhoneNumbers 列表中先添加号码,然后检查。

    public App()
        {
            InitializeComponent();
    
            PhoneNumbers = new List<string>();
            PhoneNumbers.Add("123456789");
            PhoneNumbers.Add("178967897");
            PhoneNumbers.Add("178945678");
    
            MainPage = new NavigationPage(new MainPage());
        }
    

    【讨论】:

    • 嗨 Hitesh Patel,在 MainPage.xaml.cs 中,您可以看到 OnCall 方法。在 OnCall 方法中调用后将每个号码添加到列表中。每次调用并导航到 CallHistoryPage 后,我可以看到列表项增加(可以看到列表项边框增加)。但是电话号码没有出现
    • 请参阅添加到问题中的链接以获取更多详细信息。我遵循了相同的教程。代码是一样的。
    【解决方案3】:

    我想你忘了从用户那里获取输入。所以在 OnCall 方法中添加这一行

    translatedNumber = PhonewordTranslator.ToNumber(phoneNumberText.Text);
    

    试试这个,

    async void OnCall(object sender, EventArgs e)
        {
    
            translatedNumber = PhonewordTranslator.ToNumber(phoneNumberText.Text);
    
            if (await this.DisplayAlert(
                    "Dial a Number",
                    "Would you like to call " + translatedNumber + "?",
                    "Yes",
                    "No"))
            {
                var dialer = DependencyService.Get<IDialer>();
                if (dialer != null)
                {
                    App.PhoneNumbers.Add(translatedNumber);
                    callHistoryButton.IsEnabled = true;
                    dialer.Dial(translatedNumber);
                }
            }
        }
    

    【讨论】:

    • 谢谢哥们。问题不在于价值观。保罗的回答解决了我的问题。
    猜你喜欢
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2019-10-25
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多