Xamarin表单ListView文本未显示

时间:2017-12-12 08:49:47

标签: xamarin xamarin.forms

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

列表视图文本未显示。请帮帮我!

CallHistoryPage.xaml:这里有listview。

<?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:listview的Sourceitem在此类

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
        }
    }
}

有关详情,请点击上面添加的链接。遵循相同的教程。

3 个答案:

答案 0 :(得分:1)

您尚未在PhoneNumbers列表中添加任何数字。首先在PhoneNumbers列表中添加数字,然后检查。

public App()
    {
        InitializeComponent();

        PhoneNumbers = new List<string>();
        PhoneNumbers.Add("123456789");
        PhoneNumbers.Add("178967897");
        PhoneNumbers.Add("178945678");

        MainPage = new NavigationPage(new MainPage());
    }

答案 1 :(得分: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>

BindingContext中的DataTemplate将是App.PhoneNumbers中的相应项目。由于这些项是裸string s,我们绑定到.,它引用绑定元素本身。

请参阅here了解Xamarin.Forms中的ListView

答案 2 :(得分:0)

我认为你忘了从用户那里获取输入。所以在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);
            }
        }
    }