当我尝试通过单击按钮调用命令时遇到问题,这是我的代码,请帮助 Postscript,如果我将按钮从 collectionView 上移开,命令将起作用。该命令的名称是ButtonCommand,我想我需要更多参数,帮助。
主页.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>
Run Code Online (Sandbox Code Playgroud)
视图模型--MainPageViewModel
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");
}}
}
Run Code Online (Sandbox Code Playgroud)
正如 Jason 所说,BindingContextDataTemplate 内的按钮是 的一个实例Product。ButtonCommand没有为产品定义。ButtonCommand 在您的 ViewModel 中,因此您需要引用ViewModel.ButtonCommand:
首先,为您的 ContentPage 命名,如下所示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">
Run Code Online (Sandbox Code Playgroud)
在你的绑定中:
<Button Grid.Column="3" Grid.RowSpan="2" Grid.Row="1" Text="Click me!" Command="{Binding BindingContext.ButtonCommand, Source={x:Reference MyPage}}"/>
Run Code Online (Sandbox Code Playgroud)
顺便说一句,没有必要写x:DataType。
请参阅:Xamarin 按钮命令(ListView.ItemTemplate 内部)未触发
| 归档时间: |
|
| 查看次数: |
3112 次 |
| 最近记录: |