Xamarin Forms 列表视图:向列表项添加命令
Xamarin Forms List View: Add Command to List Item
注意:这是针对 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 Forms 跨平台列表视图添加操作的最佳practice/correct方法是什么?
更新 1:我将下面的代码更改为:
这是我的 header:
<?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 的建议将命令例程设为静态。我实际上正在倒退,因为列表视图现在停止从上一页加载。我发现如果我 return 按钮命令到它的原始代码(这显然是错误的)它确实有效。我进行绑定的方式有问题。
如果您需要做的只是将代码隐藏的命令绑定到按钮的命令 属性 那么您需要在 "code behind":
中将命令定义为静态
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>
这对我来说效果很好。我希望你能得到你正在寻找的知识。
注意:这是针对 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 Forms 跨平台列表视图添加操作的最佳practice/correct方法是什么?
更新 1:我将下面的代码更改为:
这是我的 header:
<?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 的建议将命令例程设为静态。我实际上正在倒退,因为列表视图现在停止从上一页加载。我发现如果我 return 按钮命令到它的原始代码(这显然是错误的)它确实有效。我进行绑定的方式有问题。
如果您需要做的只是将代码隐藏的命令绑定到按钮的命令 属性 那么您需要在 "code behind":
中将命令定义为静态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>
这对我来说效果很好。我希望你能得到你正在寻找的知识。