如何从选定的选择器更新标签元素? Xamarin 表单

问题描述

我目前正在开展一个向您显示实时股票价格的项目。我想通过选择器系统获取任何符号的价格,该系统通过将所选项目添加到下载字符串请求的链接中来显示选择器中所选项目的价格。我遇到的问题是,当我更改选择器时,什么也没有发生。

C# 代码

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace Stock_WatchList
{
    [XamlCompilation(XamlCompilationoptions.Compile)]
    public partial class sybmolSelector : ContentPage
    {
        public string price { get; set; }
        public sybmolSelector()
        {
            InitializeComponent();

            BindingContext = this;
        }

        private void SymbolSelector_SelectedindexChanged(object sender,EventArgs e)
        {
            Picker picker = sender as Picker;
            var selectedItem = picker.SelectedItem;

            var link = "https://sandBox.iexapis.com/stable/stock/" + selectedItem + "/price?token=Tsk_57bebc1d051340dbaad8656ab0027e90";

            var client1 = new WebClient();
            string a = client1.DownloadString(link);
            price = "$" + a;
        }
    }
}

这是 Xamarin.Forms 代码

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Stock_WatchList.sybmolSelector"
             BackgroundColor="Black"
             NavigationPage.IconColor="LimeGreen">
    <ContentPage.Content>
        <StackLayout>
            <Label TextColor="LimeGreen" BackgroundColor="Black" Text="----------------------- Select A Symbol -------------------------" FontSize="19" LineBreakMode="TailTruncation"></Label>
            <Picker x:Name="Picker" SelectedindexChanged="SymbolSelector_SelectedindexChanged" TextColor="LimeGreen" BackgroundColor="#111111">
                <Picker.Items>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                    <x:String>AAPL</x:String>
                    <x:String>NIO</x:String>
                </Picker.Items>
            </Picker>
            <Label Margin="5" Text="{Binding selectedItem}" HorizontalOptions="Start" TextColor="White" FontSize="40"/>
            <Label Margin="5,5,5" Text="{Binding price}" HorizontalOptions="Start" TextColor="White" FontSize="50"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

提前致谢,内森 T。

解决方法

为您的标签命名:

<Label x:Name="lblPicker" TextColor="LimeGreen" BackgroundColor="Black" Text="----------------------- Select A Symbol -------------------------" FontSize="19" LineBreakMode="TailTruncation"></Label>

然后你可以在你的代码后面访问这个标签,并将picker值分配给标签:

private void SymbolSelector_SelectedIndexChanged(object sender,EventArgs e)
        {
            Picker picker = sender as Picker;
            var selectedItem = picker.SelectedItem;

            var link = "https://sandbox.iexapis.com/stable/stock/" + selectedItem + "/price?token=Tsk_57bebc1d051340dbaad8656ab0027e90";

            var client1 = new WebClient();
            string a = client1.DownloadString(link);
            lblPicker.Text = "$" + a;
        }

您也可以在 viewmodel 中执行此操作,但为此您需要将选择器的 ItemSource 属性与 ViewModel 的属性绑定,但在那之前您可以通过这种方式进行代码隐藏