Как я могу исправить: имя 'productQuantity' не закрывается в текущем контексте - PullRequest
0 голосов
/ 10 марта 2020

Я использую Xamarin.forms в visual studio. Проблема, которая у меня есть, заключается в том, что я назвал запись как x: Name = "productQuantity" в моем файле NuevaVenta.xaml, и когда я пытаюсь использовать эту запись в моем файле NuevaVenta.xaml.cs, он говорит: Имя 'productQuantity 'не выходит в текущем контексте. Так что я не могу использовать его в любом случае.

Это мой файл .cs:

using System;
using System.Collection.Generic;
using Xamarinin.Forms;

namespace Saansa.Views{
public partial class NuevaVenta : ContentPage
{
    public Venta()
    {
         InitializeComponent();
    }

    protected async override void OnAppearing()
    {
        base.OnAppearing();
        var articuloLista = await App.SQLiteDb.GetItemsAsync();
        if (articuloLista != null)
        {
            listART.ItemsSource = articuloLista;
        }
    }

    int pQuantity = 0;

    void subButton_Clicked(System.Object sender, System.EventArgs e)
    {
        pQuantity--;
        if (pQuantity == -1) {
            pQuantity = 0;
        }
        productQuantity.Text = pQuantity.ToString();
    }

    void addButton_Clicked(System.Object sender, System.EventArgs e)
    {
        pQuantity++;
        productQuantity.Text = pQuantity.ToString();
    }

    void addCart_Clicked(System.Object sender, System.EventArgs e)
    {
    }

    void goToCart_Clicked(System.Object sender, System.EventArgs e)
    {
        Navigation.PushAsync(new CarritoDeVentas());
    }
  }
}

Это мой файл 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"
         x:Class="Saansa.Views.NuevaVenta"
         xmlns:local= "clr-namespace:Saansa">
<ContentPage.Content>
    <StackLayout BackgroundColor="#f5cda2">
        <ListView x:Name="listART" BackgroundColor="#f5cda2">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <StackLayout. HorizontalOptions="StartAndExpand">
                                <Label Text="{Binding Producto}"
                                       Margin="5,0,0,0"
                                       FontSize="Large"/>
                            </StackLayout>
                            <Button x:Name="subButton"
                                    Text="-"
                                    BackgroundColor="#b27b4b"
                                    Margin="5,5,0,5"
                                    Clicked="subButton_Clicked"
                                    FontSize="Small"
                                    TextColor="Black"
                                    WidthRequest="30"/>
                            <StackLayout>
                                <Entry Text="0" x:Name="productQuantity"
                                       Placeholder="0" MaxLength="2"
                                       Margin="5,0,0,0" Keyboard="Numeric"
                                       FontSize="Small"
                                       HorizontalOptions="Center"/>
                            </StackLayout>
                            <Button x:Name="addButton"
                                    Text="+"
                                    BackgroundColor="#b27b4b"
                                    Margin="5,5,0,5"
                                    Clicked="addButton_Clicked"
                                    FontSize="Small"
                                    TextColor="Black"
                                    WidthRequest="30"/>
                            <Button x:Name="addCart"
                                    Text="Agregar"
                                    BackgroundColor="#b27b4b"
                                    Margin="5,3,5,3"
                                    Clicked="addCart_Clicked"
                                    FontSize="Small"
                                    TextColor="Black"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <StackLayout VerticalOptions="EndAndExpand">
            <Button x:Name="goToCart" Text="Ir al carrito" BackgroundColor="White" Clicked="goToCart_Clicked"
                     CornerRadius="5" Margin="1"/>
        </StackLayout>
    </StackLayout>
</ContentPage.Content>

1 Ответ

1 голос
/ 11 марта 2020

Как правило, вы не можете получить доступ к любому элементу управления внутри шаблона элемента по имени. предоставление любого элемента управления внутри ItemTemplate x: Name даст вам ошибку компилятора, если вы попытались получить доступ к этому элементу управления в коде позади. Вместо этого назначьте обработчик Click (или используйте команду) в XAML.

Так что мне нужно чтобы создать метод для нажатия кнопки, в вашем коде я использую метод subButton_Clicked. Тогда Object is Sender , который является обработчиком события нажатия кнопки. Затем мы должны найти родительский макет или родительский контейнер для кнопки, проанализировав файл xaml, наконец, мы можем получить доступ ко всем дочерним элементам родительского элемента.

Используя ваш код, чтобы сделать один пример:

  <StackLayout>
        <ListView
            x:Name="listART"
            BackgroundColor="#f5cda2"
            HasUnevenRows="True"
            ItemsSource="{Binding products}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <StackLayout HorizontalOptions="FillAndExpand">
                                <Label
                                    Margin="5,0,0,0"
                                    FontSize="Large"
                                    Text="{Binding Producto}" />

                                <Button
                                    x:Name="subButton"
                                    Margin="5,5,0,5"
                                    BackgroundColor="#b27b4b"
                                    Clicked="subButton_Clicked"
                                    FontSize="Small"
                                    Text="-"
                                    TextColor="Black"
                                    WidthRequest="30" />
                                <StackLayout>
                                    <Entry
                                        x:Name="productQuantity"
                                        Margin="5,0,0,0"
                                        FontSize="Small"
                                        HorizontalOptions="Center"
                                        Keyboard="Numeric"
                                        MaxLength="2"
                                        Placeholder="0"
                                        Text="0" />
                                </StackLayout>
                                <Button
                                    x:Name="addButton"
                                    Margin="5,5,0,5"
                                    BackgroundColor="#b27b4b"
                                    Clicked="addButton_Clicked"
                                    FontSize="Small"
                                    Text="+"
                                    TextColor="Black"
                                    WidthRequest="30" />
                                <Button
                                    x:Name="addCart"
                                    Margin="5,3,5,3"
                                    BackgroundColor="#b27b4b"
                                    Clicked="addCart_Clicked"
                                    FontSize="Small"
                                    Text="Agregar"
                                    TextColor="Black" />
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <StackLayout VerticalOptions="EndAndExpand">
            <Button
                x:Name="goToCart"
                Margin="1"
                BackgroundColor="White"
                Clicked="goToCart_Clicked"
                CornerRadius="5"
                Text="Ir al carrito" />
        </StackLayout>
    </StackLayout>

  public partial class Page7 : ContentPage
{
    public ObservableCollection<Productmodel> products { get; set; }
    public Page7()
    {
        InitializeComponent();

        products = new ObservableCollection<Productmodel>()
        {
            new Productmodel(){Producto="product 1"},
            new Productmodel(){Producto="product 2"},
            new Productmodel(){Producto="product 3"},
            new Productmodel(){Producto="product 4"},
            new Productmodel(){Producto="product 5"},
            new Productmodel(){Producto="product 6"}
        };
        this.BindingContext = this;
    }

    private void goToCart_Clicked(object sender, EventArgs e)
    {

    }

    private void addButton_Clicked(object sender, EventArgs e)
    {

    }

    private void addCart_Clicked(object sender, EventArgs e)
    {

    }

    private async void subButton_Clicked(object sender, EventArgs e)
    {
        var buttonClickHandler = (Button)sender;
        StackLayout parentstacklayout = (StackLayout)buttonClickHandler.Parent;
        StackLayout stacklayout1 =(StackLayout)parentstacklayout.Children[2];
        Entry productQuantity = (Entry)stacklayout1.Children[0];
        await DisplayAlert("productQuantity detail","the productQuantity text is "+productQuantity.Text,"OK");
    }
}

public class Productmodel
{
    public string Producto { get; set; }
}

Это скриншот:

enter image description here

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