按钮的命令不起作用,按钮在集合视图中



尝试通过单击按钮调用命令时出现问题,这是我的代码,请帮助 后记,如果我把按钮从集合视图上移开,命令就可以了。 该命令的名称是按钮命令,我想我需要更多的参数,帮助。

MaingPage.Xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="XamarinCollectionView.MainPage"
xmlns:viewModels="clr-namespace:PruebaAppMap.ViewModels"
xmlns:Models="clr-namespace:PruebaAppMap.Models"
x:DataType="viewModels:MainPageViewModel"
BackgroundColor="#2471A3">
<CollectionView  ItemsSource="{Binding Products}">
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="Models:Product">
<Frame
Padding="5"
CornerRadius="5"
IsClippedToBounds="False">
<Grid HeightRequest="100">
<Grid.ColumnDefinitions >
<ColumnDefinition Width=".3*"/>
<ColumnDefinition Width=".7*"/>
<ColumnDefinition Width=".4*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height=".5*"/>
<RowDefinition Height=".5*"/>
<RowDefinition Height=".7*"/>
</Grid.RowDefinitions>
<Label Grid.Column="1" FontAttributes="Bold" FontSize="Large" VerticalOptions="Center" Text="{Binding Name}"/>
<Label Grid.Column="1" Grid.Row="1"  FontSize="Medium" Text="{Binding Price,StringFormat='{0:C}'}"/>
<Button Grid.Column="3" Grid.RowSpan="2" Grid.Row="1" x:DataType="viewModels:MainPageViewModel"  Text="Click me!" CommandParameter="{Binding}" Command="{Binding ButtonCommand}"/>
</Grid>
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>

视图模型 -

-主页视图模型

namespace PruebaAppMap.ViewModels{
public class MainPageViewModel
{
public ObservableCollection<Product> Products { get; set; }
public ICommand ButtonCommand { get; set; }
public MainPageViewModel() 
{
Products = new ObservableCollection<Product>
{
new Product
{
Name="Yogurt",
Price=5.50m,
Image="yogurt.png",
hasOffer=false
},              
};
ButtonCommand = new Command(async () => await buton());
}
public async Task buton()
{
await App.Current.MainPage.DisplayAlert("Button pressed", "button was pressed", "ok");
}}
}

正如 Jason 所说,DataTemplate 中按钮的BindingContextProduct的一个实例。ButtonCommand未为产品定义。ButtonCommand 位于您的 ViewModel 中,因此您需要引用ViewModel.ButtonCommand

首先,给你的内容页面起一个名字,让我们说MyPage

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="MyPage"
x:Class="App266.MainPage">

在您的绑定中:

<Button Grid.Column="3" Grid.RowSpan="2" Grid.Row="1" Text="Click me!" Command="{Binding BindingContext.ButtonCommand, Source={x:Reference MyPage}}"/>

顺便说一句,没有必要写x:DataType.

参考:Xamarin 按钮命令(在 ListView.ItemTemplate 内部(未触发

最新更新