【问题标题】:Read dynamically created Entry value inside ListView in Xamarin在 Xamarin 中的 ListView 中读取动态创建的条目值
【发布时间】:2020-05-05 00:33:55
【问题描述】:

我完全是使用 VS2019 使用 Xamarin 的初学者。 我有一个动态创建项目的 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 值。 请问有什么帮助吗? 谢谢。

【问题讨论】:

  • 您需要使用数据绑定将 Entry 值绑定到模型的属性。然后将模型的值相加得到总数。
  • 感谢 Jason,我是一个完整的初学者,我会尝试结帐,但请您帮我提供一些基本示例。真的谢谢!

标签: listview xamarin visual-studio-2019


【解决方案1】:

您需要将Entry 绑定到Item 模型上的属性。假设它被称为Count

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

然后将places 中的所有Count 值相加,您可以使用LINQ

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

【讨论】:

  • 杰森,谢谢!让我清楚我需要什么。 ListView 的每一行代表一个产品:ID、名称和价格。用户将在Entry (x:name=txtCant) 上输入需要购买的产品数量,当用户最后点击“on_btOrder”按钮时,我将收集产品id 和数量。我知道旧的编程风格很差,但作为初学者,我没有看到其他方法。感谢您的帮助!
  • 您需要在模型中添加一个数量属性,然后当您的用户单击订单时,您将在plates 中获得您需要的所有数据。或者,您可以创建一个包含 ItemQty 属性的新 VM。
  • 谢谢!检查答案,看看我做了什么。 VM(ViewModel?)的第二个选项选项有什么想法。
【解决方案2】:

这是我所做的: 1.编辑“物品”模型

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" />

现在当我点击“订购”按钮时

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

var "total" 显示 "plates" 列表的项目数

【讨论】:

  • 您好,如果解决了这个问题,记得在有时间的时候标记答案。 :-)
猜你喜欢
  • 2018-11-18
  • 1970-01-01
  • 2021-08-06
  • 2023-03-12
  • 2022-12-04
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
相关资源
最近更新 更多