Чтение динамически созданного значения Entry внутри ListView в Xamarin - PullRequest
0 голосов
/ 04 мая 2020

Я новичок в работе с Xamarin с использованием VS2019. У меня есть ListView с элементами, созданными динамически. Вот код XAML:

<ContentPage.Content>
    <StackLayout Margin="20,35,20,20">
    <ListView ItemsSource="{Binding plates}" x:Name="menuView" 
              HasUnevenRows="True">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid Padding="10">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"  />
                            <RowDefinition Height="*" />
                            </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*"  />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0" Grid.Row="0" Text="{Binding Name}" FontAttributes="Bold"
                               FontSize="Large" Grid.ColumnSpan="3" />
                        <Label Text="Qyt:" Grid.Column="0" Grid.Row="1" HorizontalTextAlignment="Start"
                               VerticalTextAlignment="Center" />
                            <Entry Placeholder="nCant" Text="0" x:Name="txtCant" Grid.Row="1" Grid.Column="1" HorizontalOptions="Start"
                               WidthRequest="40" VerticalTextAlignment="End" BackgroundColor="#f2f0f0" ></Entry>
                        <Label Grid.Row="1" Grid.Column="1" Text="{Binding Price}" FontAttributes="Bold"
                               HorizontalTextAlignment="End" FontSize="Large" />
                        </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <StackLayout HorizontalOptions="CenterAndExpand">
        <Button Text="ORDER" FontSize="Medium" BackgroundColor="LightCyan" WidthRequest="200" 
                HorizontalOptions="CenterAndExpand" Clicked="on_btOrder" x:Name="btCant" />                 
    </StackLayout>

</StackLayout>
</ContentPage.Content>

А вот код для заполнения ListView:

        public List<Item> menuFull;
        public List<Item> plates { get; set; }
        clientDB = new httpClient();
        url = "http://XXXXXXXXXXXXXXXXXXXXXXX?format=json";

        var result = await client.Get<List<Item>>(url);
        foreach (Item prod in result)
        {
            menuFull.Add(prod);
        }

        List<Item> products = new List<Item>();

        if (menuFull.Count == 0)
        {
            await DisplayAlert("Error", "DB ERROR", "OK");
            return;
        }

        plates = new List<Item>();
        foreach (Item row in menuFull)
        {
            if (row.Price.Length <= 2)
                row.Price += ".00";
            else
                row.Price += "0";
            plates .Add(new Item
            {
                Name = row.Name,
                Price = row.Price,
            });
        }
        BindingContext = this;

Теперь, когда пользователь нажимает кнопку btOrder, мне нужно собрать все значения btCant. В конце мне нужно найти способ узнать только одно значение Entry. Любая помощь, пожалуйста? Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Вот что я сделал: 1. Отредактируйте модель "Item"

public class Item
{
    #region Private Variables

    public int id;
    public string price;
    public string name;
    public int deleted;
    public int Qyt;
}

Теперь измените запись в XMAL на:

<Entry Text="{Binding Qyt}" x:Name="txtCantidad" Grid.Row="1" 
                               Grid.Column="1" HorizontalOptions="Start" WidthRequest="40" VerticalTextAlignment="End" />

Теперь, когда я нажимаю на кнопку "Order"

var total = plates.Sum(p => p.Count);

В var "total" отображается количество элементов списка "пластин"

0 голосов
/ 04 мая 2020

вам нужно привязать Entry к свойству на вашей Item модели. Давайте предположим, что он называется Count

<Entry Text="{Binding Count}" ... />

, а затем для суммирования всех значений Count в places вы можете использовать LINQ

var total = plates.Sum(p => p.Count);
...