我有一个列表视图,其中的ItemTemplate定义如下:
for (Message message = null; message < messages.length; message++) {...}
我在文件后面的代码按如下方式处理OnDelete_Tapped:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.7*" />
<ColumnDefinition Width="0.3*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding AddressTypeName}" Grid.Column="0"/>
<Label Text=""
Grid.Column="1"
FontFamily="{StaticResource SegoeMDL2Assets}" FontSize="Medium" HorizontalOptions="End">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="OnDelete_Tapped" CommandParameter="{Binding .}"/>
</Label.GestureRecognizers>
</Label>
</Grid>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
EventArgs e确实返回了其中包含正确对象(在我的情况下为正确的AddressType对象)的EventArgs对象。
ViewModel定义如下:
public void OnDelete_Tapped(object sender, EventArgs e)
{
viewModel.DeleteCommand.Execute(e);
viewModel.LoadAddressTypesCommand.Execute(true);
}
从不执行DeleteCommand。我可以单步执行代码,但是从不调用viewModel中的DeleteCommand。 LoadAddressTypesCommand可以正常运行-不仅是从后面的代码中,而且在其他地方,我都将该命令作为命令绑定到了我的viewModel。有什么想法我做错了吗?预先感谢。
答案 0 :(得分:0)
您可以尝试以下方法:
在xaml中:
<TapGestureRecognizer Tapped="OnDelete_Tapped" CommandParameter="{Binding .}"/>
然后e.Parameter将是您在CommandParameter中设置的任何内容。
public void OnDelete_Tapped(object sender, TappedEventArgs e)
{
var addressType = (e.Parameter) as AddressType;
viewModel.DeleteCommand.Execute(addressType );
viewModel.LoadAddressTypesCommand.Execute(true);
}
<TapGestureRecognizer
Command="{Binding DeleteCommand}"
CommandParameter="{Binding .}" />