繁体   English   中英

Xamarin Forms - 单击图像时如何选择 ListView 项?

[英]Xamarin Forms - How to select a ListView item when its image is clicked?

我有一个用 xaml 编码的数据模板,其中ListViewItem有一个ImageButton

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="George.KeySave.FilesList"
         xmlns:localImg="clr-namespace:George.Image"
         Title="KeySave">
<ContentPage.Content>
    <ListView x:Name="Flist" ItemSelected="Flist_ItemSelected">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Orientation="Horizontal" Padding="5,0,0,0">
                        <Label x:Name="SelFileName" Text="{Binding fname}" FontSize="Medium" TextColor="Blue" VerticalOptions="Center"/>
                        <ImageButton HeightRequest="33" WidthRequest="33" Source="{localImg:Emb ResId=George.Image.deer.png}"
                                     x:Name="delete" Clicked="delete_Clicked" HorizontalOptions="EndAndExpand"/>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage.Content>

但在这些条件下它会失败。 假设我单击第二个项目的名称,以便选择第二个项目。 问题是如果我现在单击第一项的ImageButton ,将删除错误的文件,因为仍然选择了第二项。

此代码显示了我如何处理ImageButton.ClickListView.ItemSelected事件。

public partial class FilesList : ContentPage
{
    private void delete_Clicked(object sender, EventArgs e)
    {
        DisplayAlert("delete file", $"{TdelFile.fname}", "ok");
    }

    listdatas TdelFile;
    private void Flist_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var delFile = e.SelectedItem as listdatas;
        TdelFile = delFile;
    }
}

问题:当我在选择第二项时单击第一项的ImageButton时弹出不正确的文件。

删除错误的文件

现在编写代码时,您将查看ImageButton.Click处理程序的sender参数,该参数将ImageButton ImageButtonBindingContext将是项目本身,您可以从中设置FList.SelectedItem 然后,在继续(或不)删除文件之前,会向用户提供确认提示。

private async void delete_Clicked(object sender, EventArgs e)
{
    if (sender is ImageButton imageButton)
    {
        Flist.SelectedItem = imageButton.BindingContext;
        var fileName = ((DataModel)Flist.SelectedItem).fname;
        if (await App.Current.MainPage.DisplayAlert(
            "delete file",
            fileName, accept: "OK",
            cancel: "CANCEL"))
        {
            System.Diagnostics.Debug.WriteLine($"DELETED {fileName}");
        }
        else
        {
            System.Diagnostics.Debug.WriteLine("Cancelled!");
        }
    }
}

确定-取消提示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM