формы xamarin - как получить продукт из списка при нажатии кнопки `` удалить '' - PullRequest
0 голосов
/ 09 июля 2020

Кнопка «удалить» добавляется к каждому элементу в списке, когда пользователь нажимает кнопку удаления, он вызывает RemoveItemFromShoppingList () и удаляет продукт из списка корзины покупок.

Я проверил вызов RemoveItemFromShoppingList () и удаление первого элемента из списка покупок. Все это работает нормально, и новый список корзины покупок обновлен.

Но вместо удаления первого элемента я хочу удалить продукт, на который нажимает пользователь. Я попытался захватить ProductId, но не могу его получить ... пожалуйста, сообщите

    <ContentPage.Content>
        <StackLayout>
            <ListView ItemsSource="{Binding ShoppingListItemSource}" HasUnevenRows="True" SeparatorVisibility="None">
                <ListView.Footer>
                    <Label x:Name="Total" HorizontalTextAlignment="End" VerticalTextAlignment="Start" Margin="20,20" FontAttributes="Bold"/>
                </ListView.Footer>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid Padding="10" RowSpacing="10" ColumnSpacing="10">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Label Grid.Column="0" Text="{Binding ProductId}" VerticalOptions="End" IsVisible="False"/>
                                <controls:CircleImage  Grid.Column="1"  Grid.Row="1" HeightRequest="60" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" Aspect="AspectFill" WidthRequest="66" Grid.RowSpan="2" Source="{Binding Img}"/>
                                <Label Grid.Column="2" Grid.Row="1" Text="{Binding Name}" VerticalOptions="End"/>
                                <Label Grid.Column="2" Grid.Row="2" VerticalOptions="Start" Text="{Binding Detail}"/>
                                <Label Grid.Column="3" Grid.Row="2" VerticalOptions="Start" Text="{Binding TotalPrice, StringFormat='£{0:0.00}'}"/>
                                
                                <Label Grid.Column="4" Grid.Row="2" VerticalOptions="Start" Text="{Binding QuantityOfProduct}"/>

                                <Label Grid.Column="5" Grid.Row="2" VerticalOptions="Start" Text="{Binding SubTotal, StringFormat='£{0:0.00}'}"/>
                                <Button Grid.Column="6" Grid.Row="2" VerticalOptions="Start" Text="Delete" Clicked="RemoveItemFromShoppingList" Grid.RowSpan="2" />
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

ни один из них не работает, может кто-нибудь, пожалуйста, скажите мне, как получить идентификатор продукта при нажатии на удаление? спасибо

   void RemoveItemFromShoppingList(object sender, EventArgs e)
        {
        //How can I get Id of product the user wishes to delete
        //have tried many things...
        
        
            //  var productToRemove = (Button)sender;
            // Product product = new Product();
            //var p_Id = int.Parse(productToRemove.ProductId.ToString());
            //product.ProductId = productId;
            
             //var product = ((Button)sender).BindingContext;
            //  var productId = product.id;    
            
            //Button button = (Button)sender;
            //var imt = (Grid)button.Parent;
            //var c = (Label)imt.Children[0];
            }

1 Ответ

2 голосов
/ 09 июля 2020

используйте BindingContext - это предполагает, что ваш ItemsSource является коллекцией типа Product

void RemoveItemFromShoppingList(object sender, EventArgs e)
{
  var button = (Button)sender;
  var item = (Product)button.BindingContext;
  ...

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