Как я могу получить текст из метки внутри ListView? - PullRequest
0 голосов
/ 22 апреля 2020

Я использую Xamarin.forms в visual studio. У меня проблема в том, что я не знаю, как получить текст, который отображается на метке внутри представления списка в файле xaml, потому что я хочу использовать этот текст для внесения некоторых изменений в другой список в xaml. файл cs.

    <?xml version="1.0" encoding="UTF-8"?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Saansa.Views.CarritoDeVentas">
        <ContentPage.Content>
            <StackLayout BackgroundColor="Blue">
                <ListView x:Name="listaArticulosCarrito" BackgroundColor="White">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <StackLayout Orientation="Horizontal">
                                    <StackLayout HorizontalOptions="StartAndExpand">
                                        <Label Text="{Binding Producto}" Padding="7"
                                               TextColor="Black" FontSize="Large"/>
                                    </StackLayout>
                                    <StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand">
                                        <Label x:Name="PrecioProducto"  Text="{Binding Precio}" VerticalOptions="CenterAndExpand"
                                               TextColor="LightGray" HorizontalOptions="EndAndExpand"/>
                                        <Label x:Name="CantidadProducto" Text="{Binding Cantidad}" Padding="7"
                                               TextColor="Black" FontSize="Large"/>
                                    </StackLayout>
                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
                <StackLayout BackgroundColor="Aqua" Orientation="Horizontal">
                    <StackLayout BackgroundColor="Red">
                        <Label Text="Precio total de la venta:" HorizontalOptions="StartAndExpand"
                       Padding="7"/>
                    </StackLayout>
                    <StackLayout BackgroundColor="Yellow" HorizontalOptions="EndAndExpand">
                        <Label Text="{Binding price}" Padding="7"/>
                    </StackLayout>
                </StackLayout>
                <Button Text="Pagar" BackgroundColor="White" Clicked="Button_Clicked"
                        BorderColor="Orange" BorderWidth="2" CornerRadius="15" Margin="10"/>
            </StackLayout>
        </ContentPage.Content>
    </ContentPage>

Это мой файл xaml и значение, которое я хочу принять, чтобы я мог внести изменения в файл xaml.cs - это текст из метки с именем «PrecioProducto». Это действительно помогло бы мне, если бы вы могли сказать мне, как код пишется в c#.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Согласно вашему описанию, я не уверен, хотите ли вы получить текст метки PrecioProducto для выбранного элемента ListView, или вы хотите получить весь текст метки PrecioProducto для ListView.

Если это первый случай, По мнению Джейсона, я предлагаю вам использовать привязку для ListView SelectedItem .

 <ListView
            x:Name="listaArticulosCarrito"
            BackgroundColor="White"
            ItemsSource="{Binding pricemodels}"
            SelectedItem="{Binding selecteditem}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <StackLayout HorizontalOptions="StartAndExpand">
                                <Label
                                    Padding="7"
                                    FontSize="Large"
                                    Text="{Binding Producto}"
                                    TextColor="Black" />
                            </StackLayout>
                            <StackLayout HorizontalOptions="EndAndExpand" Orientation="Horizontal">
                                <Label
                                    x:Name="PrecioProducto"
                                    HorizontalOptions="EndAndExpand"
                                    Text="{Binding Precio}"
                                    TextColor="LightGray"
                                    VerticalOptions="CenterAndExpand" />
                                <Label
                                    x:Name="CantidadProducto"
                                    Padding="7"
                                    FontSize="Large"
                                    Text="{Binding Cantidad}"
                                    TextColor="Black" />
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

Пожалуйста, не забудьте реализовать интерфейс INotifyPropertyChanged для уведомления об изменении данных.

 public partial class Page16 : ContentPage, INotifyPropertyChanged
{
    public ObservableCollection<pricemodel> pricemodels { get; set; }
    private pricemodel _selecteditem;
    public pricemodel selecteditem
    {
        get { return _selecteditem; }
        set
        {
            _selecteditem = value;
            RaisePropertyChanged("selecteditem");
        }
    }

    public Page16()
    {
        InitializeComponent();

        pricemodels = new ObservableCollection<pricemodel>()
        {
            new pricemodel(){Producto="product 1",Precio=21.01,Cantidad="product1"},
            new pricemodel(){Producto="product 2",Precio=31.01,Cantidad="product2"},
            new pricemodel(){Producto="product 3",Precio=41.01,Cantidad="product3"},
            new pricemodel(){Producto="product 4",Precio=51.01,Cantidad="product4"},
            new pricemodel(){Producto="product 5",Precio=61.01,Cantidad="product5"}
        };
        this.BindingContext = this;
    }

    public event PropertyChangedEventHandler PropertyChanged;      
    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    private void Button_Cicked(object sender, EventArgs e)
    {

        var PrecioProducto = selecteditem.Precio;
        Console.WriteLine("the listview select item precioproduct label text is {0}",PrecioProducto);
    }
}

public class pricemodel
{
    public string Producto { get; set; }
    public double Precio { get; set; }
    public string Cantidad { get; set; }
}

Если это второе, вы хотите получить весь текст метки PrecioProducto для ListView, вам нужно просто указать ценовые модели, чтобы получить значение Precio.

 foreach(pricemodel m in pricemodels)
        {
            var precio = m.Precio;
        }
0 голосов
/ 23 апреля 2020

Например, для метки

<Label x:Name="PrecioProducto"  Text="{Binding Precio}" VerticalOptions="CenterAndExpand"
                                               TextColor="LightGray" HorizontalOptions="EndAndExpand"/>

В файле .cs вы можете напрямую использовать имя, которое вы задали как x: Name (в данном случае PrecioProducto), в качестве переменной. Текст этого ярлыка будет

var tx = PrecioProducto.Text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...