Xamarin表单列表视图:将命令添加到列表项

问题描述 投票:0回答:1

注意:这适用于Xamarin表格。被认为是重复的问题是实际处理C#ListView

我有一个列表视图(使用Visual Studio 2017 for Mac Xamarin Forms的跨平台)我对数据绑定有一个粗略的了解,所以我得到了从Web服务加载数据的表单。现在我想为每个显示的行执行一些操作,因此我在ListView中为每个项目嵌入了一个按钮。我无法获得如何添加操作,以便它为所选的行执行某些功能。

在ListView中,我以这种方式创建按钮:

<Button x:Name="prayUpButton" Command="{Binding _handle_prayupbutton_action}" Text="PU" Grid.Row="4" Grid.Column="0" />

在后面的代码我有以下方法:

void handle_prayupbutton_action()
{

}

public Command _handle_prayupbutton_action
{    
        get { return new Command(() => handle_prayupbutton_action());
}

根据我的理解,你创建一个Command,然后触发动作。我在这里错过了什么?如果我在void handle_prayupbutton_action()上设一个断点,它永远不会打它。

向Xamarin表单跨平台列表视图添加操作的最佳实践/正确方法是什么?

更新1:我将下面的代码更改为:

这是我的标题:

<?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="prayupapp.Pages.PrayersPage" x:Name="PrayersPagePage">

所以我更改了按钮命令:

<Button x:Name="prayUpButton" Command="{Binding Source={x:Static local.PrayersPagePage._handle_prayupbutton_action}}" Text="Pray Up" Grid.Row="4" Grid.Column="0" />

我还将命令例程设为静态,如Julipan所建议的那样。我实际上是退步,因为列表视图现在停止从上一页加载。我发现如果我将按钮Command返回到其原始代码(显然是错误的)它确实有效。我正在进行绑定的方式有问题。

button xamarin.forms cross-platform action
1个回答
0
投票

如果你需要做的就是将Code Behind命令绑定到Button的Command属性,那么你需要在“后面的代码”中将命令定义为Static:

static void handle_prayupbutton_action()
{

}

public static Command _handle_prayupbutton_action
{
    get
    {
        return new Command(() => handle_prayupbutton_action());
    }
}

在您的XAML中,您必须添加要绑定的源:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:AppX"
         x:Class="AppX.MainPage">

    <StackLayout>
        <ListView ItemsSource="{Binding Source={x:Static local:MainPage.Items},
                                        Path=.}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Button Text="{Binding .}"
                                    Command="{Binding Source={x:Static local:MainPage._handle_prayupbutton_action}}"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

这完全在我身边。我希望你能得到你正在寻找的知识。

© www.soinside.com 2019 - 2024. All rights reserved.