<?xml version="1.0" encoding="utf-8" ?>
<ListView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XXX.EditItemsList">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding .}"/>
<Button Text="Delete"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
通过单击按钮,我要删除列表中的当前项目(字符串).这怎么可能?
谢谢你的帮助 :)
按照您自己的代码,我用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:DeleteButton"
x:Class="DeleteButton.MainPage">
<ListView x:Name="listView"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding .}"/>
<Button Text="Delete" Clicked="Delete"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
关于解决方案的这一部分,我将给出以下评论:
>请注意在XAML顶部使用ConntentPage而不是ListView,这是故意的吗?
>然后,注意在ListView上添加x:Name.它将用于从后面的代码与ListView通信.
>另外请注意,将HasUnevenRows设置为True.这将导致ListView自动调整行的高度.
>终于看到在Button中,我将事件Clicked设置为“ Delete”,这是后面代码中事件处理程序的名称,您将看到.
关于我写的代码:
using System;
using System.Collections.ObjectModel;
using Xamarin.Forms;
namespace DeleteButton
{
public partial class MainPage : ContentPage
{
ObservableCollection<String> list;
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
list = new ObservableCollection<string>()
{
"Task 1", "Task 2", "Task 3", "Task 4", "Task 5",
"Task 6", "Task 7", "Task 8", "Task 9", "Task 10"
};
listView.ItemsSource = list;
}
public void Delete(Object Sender, EventArgs args)
{
Button button = (Button)Sender;
StackLayout listViewItem = (StackLayout)button.Parent;
Label label = (Label)listViewItem.Children[0];
String text = label.Text;
list.Remove(text);
}
}
}
我在那里将字符串列表定义为ObservableCollection(ObservableCollection导致ListView每次更改时都获得通知,以便ListView更新其内容,请参阅文档以获取更多详细信息).
然后,就像已经完成的那样,我将ListView的ItemSource属性设置为Strings的集合.
最后是XAML中的EventHandler Delete,由Button上的Click事件调用.这里的算法非常简单:
首先,将发送方强制转换为Button(我们知道触发事件的对象是Button).
然后,我们将层次结构树向上移动到包含Button和Label的StackLayout并检索它的第一个子级,我们知道这是Label.
获得Label后,我们将检索其Text属性,并调用集合的Remove方法来获取该项目.
就是这样.
注意:如果我自己实现此功能,我宁愿定义一个对象集合,该对象集合将包含Text属性以及Id属性,以便准确删除所点击的元素.在上面的代码中,如果集合包含两个相同的字符串,则EventHandler将仅在第一次出现时使用.
我希望这可以帮助您找到解决问题的正确方法.
转载注明原文:c#-单击ListView(Xamarin.Forms)中的按钮获取当前项目 - 乐贴网