How to remove an item from a Xamarin Forms ListView?

I am trying to remove elements / lines from ListView, but the problem is that I need to also pass some delegate or trigger some kind of event or something, so when a person clicks a button to delete this line, my code processes some other logic. in another place (for example, delete an item from the database or something else).

I have a user control:

public class SportsTeam : StackLayout { .. }

Inside this control, one of the elements is ListViewwhich lists all the people in the sports team.

var viewModel = teamMembers.Select(x => new SportsTeamViewModel(x));

return new ListView
{
    HasUnevenRows = true,
    ItemSource = viewModel,
    ItemTemplate = new DataTemplate(typeof(SportsTeamViewCell)); 
};

Inside SportsTeamViewCellI have the following:

private Grid CreateContent()
{
    var grid = new Grid();
    // Setup row and column definitions.
    // Add items to the Grid 
    grid.Children.Add(...);

    var removeButton = RemoveButton;
    grid.Children.Add(removeButton);
    Grid.SetRowSpan(removeButton, 2);

    return grid;
}

private Button RemoveButton
{
    get
    {
        var button = new Button
        {
            Image = "Icons/remove.png"
        };

        return button;
    }
}

, , , - , //, .

+6
3

:

:

public class Item  
{  
   public string ItemName { get; set; }  
   public string ItemDetails { get; set; }  
}  

XAML , Command Parameter Item:

<Button Text="Delete" CommandParameter="{Binding ItemName}" Clicked="DeleteClicked"></Button>

:

<ListView.ItemTemplate>  
            <DataTemplate>  
               <ViewCell>  
                  <ViewCell.View>  
                     <StackLayout Orientation="Horizontal">  
                        <Label Text="{Binding ItemName}" HorizontalOptions="StartAndExpand" FontSize="30"></Label>  
                        <Button Text="Delete" CommandParameter="{Binding ItemName}" Clicked="DeleteClicked">        
                        </Button>  
                     </StackLayout>  
                  </ViewCell.View>  
               </ViewCell>  
            </DataTemplate>  
         </ListView.ItemTemplate>    

:

public void DeleteClicked(object sender, EventArgs e)  
{  
   var item = (Xamarin.Forms.Button)sender;  
   Item listitem = (from itm in allItems 
                    where itm.ItemName == item.CommandParameter.ToString() 
                    select itm)
                   .FirstOrDefault<Item>();  
   allItems.Remove(listitem);  
}  

. . , ObservableCollection

- Child Control Listview XAMARIN.FORMS.

- List Xamarin.Forms listview .

+8

, . ObservableCollection<MyObject>. CommandParameter CommandParameter="{Binding .}". , Object. CommandParameter ObservableCollection<MyObject> List

XAML:

CommandParameter="{Binding .}"

:

savingExpensesCollection = new ObservableCollection<SavingsExpensesEntry> ();
savingExpensesCollection .Add (new SavingsExpensesEntry ("1000 mAh Akku", "Dampfgarten", new DateTime (635808692400000000), 8.95));
savingExpensesCollection .Add (new SavingsExpensesEntry ("Cool-Mint Aroma", "Dampfgarten", new DateTime (635808692400000000), 3.95));
savingExpensesCollection .Add (new SavingsExpensesEntry ("Basis", "Dampfgarten", new DateTime (635808692400000000), 13.65));

savingExpensesList.ItemsSource = savingExpenses;

EventHandler:

void OnDelete(object sender, EventArgs e)
{
    var menuItem = ((MenuItem)sender);
    SavingsExpensesEntry see ((SavingsExpensesEntry)menuItem.CommandParameter);
    savingExpensesCollection .Remove (see);
}

MenuItem, Button

+2

  public void OnDelete(object sender, EventArgs e)
    {
        var mi = ((MenuItem)sender);

        PhotoViewModel photo= ((photoViewModel)mi.CommandParameter);
        photoModel.Remove(photo);
    }
0

Source: https://habr.com/ru/post/1608596/


All Articles