C# Xamarin从列表ObservableCollection和listview表单中删除项
我在Xamarin(待办事项列表)上有一个简单的应用程序,其目的是动态地创建和删除列表中的项目。我正在使用C# Xamarin从列表ObservableCollection和listview表单中删除项,c#,xamarin,mobile,C#,Xamarin,Mobile,我在Xamarin(待办事项列表)上有一个简单的应用程序,其目的是动态地创建和删除列表中的项目。我正在使用ObservableCollection作为列表。我花了很多时间研究这个问题,但我无法让它工作 现在我的应用程序可以将项目添加到列表中,并在主窗体中显示。现在,我希望它通过单击按钮从列表中删除相应的项目 这是我的密码: MainPage.xaml <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http
ObservableCollection
作为列表。我花了很多时间研究这个问题,但我无法让它工作
现在我的应用程序可以将项目添加到列表中,并在主窗体中显示。现在,我希望它通过单击按钮从列表中删除相应的项目
这是我的密码:
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App3"
x:Class="App3.MainPage">
<ContentPage.ToolbarItems>
<ToolbarItem Text="Add" Clicked="addnewitem"/>
</ContentPage.ToolbarItems>
<ContentPage.BindingContext>
<local:viewmod/>
</ContentPage.BindingContext>
<StackLayout>
<Editor x:Name="txtboxNAME"></Editor>
<ListView ItemsSource="{Binding Tasks}" HasUnevenRows="True" x:Name="itemListView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame>
<StackLayout>
<Editor Text="{Binding Taskname}"/>
<Switch/>
<Button Text="Delete" CommandParameter="{Binding ItemName}" Clicked="DeleteClicked">
</Button>
</StackLayout>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
viewmod.cs
namespace App3
{
class TaskClass
{
public string Taskname { get; set; }
public string ItemName { get; set; }
}
}
using System.Collections.ObjectModel;
using Xamarin.Forms;
namespace App3
{
class viewmod
{
public ObservableCollection<TaskClass> Tasks { get; set; } = new ObservableCollection<TaskClass>();
public viewmod()
{
}
public void AddItems(string taskn, string taskid)
{
Tasks.Add(new TaskClass { Taskname = $"{taskn}", ItemName=$"{taskid}" });
}
public void DelItem(TaskClass task)
{
Tasks.Remove(task);
}
public Command<TaskClass> RemoveCommand
{
get
{
return new Command<TaskClass>((task) =>
{
Tasks.Remove(task);
});
}
}
}
}
使用System.Collections.ObjectModel;
使用Xamarin.Forms;
名称空间App3
{
类viewmod
{
公共ObservableCollection任务{get;set;}=new ObservableCollection();
公共视图模块()
{
}
公共void附加项(字符串taskn、字符串taskid)
{
添加(新任务类{Taskname=$“{taskn}”,ItemName=$“{taskid}”);
}
公共作废DelItem(TaskClass任务)
{
任务。删除(任务);
}
公共命令RemoveCommand
{
收到
{
返回新命令((任务)=>
{
任务。删除(任务);
});
}
}
}
}
首先修改XAML=语法传递整个绑定对象
<Button Text="Delete" CommandParameter="{Binding .}" Clicked="DeleteClicked" />
成功了:)非常感谢你,杰森!你是个英雄!我希望其他Xamarin的学生/开发人员会觉得这很有帮助。如果我们想在命令或MVVM中执行删除操作,我们应该如何编写代码?@Jason
<Button Text="Delete" CommandParameter="{Binding .}" Clicked="DeleteClicked" />
private void DeleteClicked(object sender, EventArgs e)
{
var itemsender = (Xamarin.Forms.Button)sender;
var item = (TaskClass)itemsender?.CommandParameter;
// it would be much cleaner to keep a ref to your VM in your page
// rather than continually casting it from BindingContext
var vm = BindingContext as viewmod;
vm.Tasks.Remove(item);
}