如何从Xamarin Forms ListView中删除项目?

Pur*_*ome 6 c# listview xamarin xamarin.forms

我正在尝试从a中删除项目/行ListView但是踢球者是我还需要传递一些委托或者触发某些事件或某事,所以当一个人点击按钮删除该行时,我的代码会处理其他一些逻辑,其他地方(例如,从数据库中移除项目或其他).

我有一个自定义控件:

public class SportsTeam : StackLayout { .. }
Run Code Online (Sandbox Code Playgroud)

在这个控制中,其中一个元素ListView列出了体育团队中的所有人.

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

return new ListView
{
    HasUnevenRows = true,
    ItemSource = viewModel,
    ItemTemplate = new DataTemplate(typeof(SportsTeamViewCell)); 
};
Run Code Online (Sandbox Code Playgroud)

在里面,SportsTeamViewCell我有以下内容:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

从这里开始,我不知道如何制作它以便按钮触发事件或者可以通过construtor传递一些删除,因此针对要删除的单个单元格/行/项目执行一些自定义逻辑.

有人可以帮忙吗?

Roh*_*ews 8

这是你可以做的:

这是我的模特课:

public class Item  
{  
   public string ItemName { get; set; }  
   public string ItemDetails { get; set; }  
}  
Run Code Online (Sandbox Code Playgroud)

在我的XAML中,你也可以在代码中编写它,绑定到Command Parameter你的Item模板:

<Button Text="Delete" CommandParameter="{Binding ItemName}" Clicked="DeleteClicked"></Button>
Run Code Online (Sandbox Code Playgroud)

完整项目模板如下所示:

<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>    
Run Code Online (Sandbox Code Playgroud)

在你的代码文件中,你可以这样做:

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);  
}  
Run Code Online (Sandbox Code Playgroud)

重要说明:这只会从绑定集合中删除该项目.要从原始列表中删除它,您需要使用它ObservableCollection

以下是解释方案的完整源代码 - 使用XAMARIN.FORMS处理Listview中的子控件事件.

另外,教程 - 如何使用Xamarin.Forms处理行中的行选择和删除按钮以解释自定义ListView中的按钮listview.