C# 未执行Behaviors.Forms命令

C# 未执行Behaviors.Forms命令,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我正在尝试将现有的Xamarin项目升级到各种库的最新版本。Xamarin表单本身生活在一个共享库中。我的页面上有一个ListView&我试图捕获在“选择”项目时触发的事件。但是,我的ViewModel中的ICommand未执行 注: 我正在使用Xamarin.Forms 4.8…但不得不将Behaviors.Forms降级为1.3,因为代码位于.NET标准库中 如果我升级到Behaviors.Forms 1.4,就会出现设计时错误(见下图) 共享库信息: .NET标准2.0 Acr.Us

我正在尝试将现有的Xamarin项目升级到各种库的最新版本。Xamarin表单本身生活在一个共享库中。我的页面上有一个ListView&我试图捕获在“选择”项目时触发的事件。但是,我的ViewModel中的ICommand未执行

注:

  • 我正在使用Xamarin.Forms 4.8…但不得不将Behaviors.Forms降级为1.3,因为代码位于.NET标准库中
  • 如果我升级到Behaviors.Forms 1.4,就会出现设计时错误(见下图)
共享库信息:
.NET标准2.0

  • Acr.UserDialogs Version=“7.1.0.454”
  • AzureMobileClient.Helpers版本=“4.0.2.507-pre”
  • Behaviors.Forms Version=“1.3.0”
  • Com.Airbnb.Xamarin.Forms.Lottie Version=“3.1.3”
  • Prism.DryIoc.Forms Version=“8.0.0.1850-pre”
  • Prism.Forms Version=“8.0.0.1850-pre”
  • Refractored.MvvmHelpers Version=“1.6.2”
  • Telerik.UI.for.Xamarin.Common Version=“2020.2.624.1”
  • Telerik.UI.for.Xamarin.DataControls Version=“2020.2.624.1”
  • Telerik.UI.for.Xamarin.DataGrid Version=“2020.2.624.1”
  • Telerik.UI.for.Xamarin.Primitives Version=“2020.2.624.1”
  • Telerik.UI.for.Xamarin.SkiaSharp Version=“2020.2.624.1”
  • Xamarin.FFImageLoading.Forms Version=“2.4.11.982”
  • Xamarin.FFImageLoading.Svg.Forms Version=“2.4.11.982”
  • Xamarin.FFImageLoading.Transformations Version=“2.4.11.982”
  • Xamarin.Forms Version=“4.8.0.1364”
转换器类:
原始程序员返回“ItemTapped”事件参数

public class SelectedItemEventArgsConverter : IValueConverter
{
    #region <Methods>

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var eventArgs = value as ItemTappedEventArgs;
        return eventArgs != null ? eventArgs.Item : null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    } 

    #endregion
}
public类SelectedItemEventTargets转换器:IValueConverter
{
#区域
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
var eventArgs=作为ItemTappedEventArgs的值;
返回eventArgs!=null?eventArgs。项:null;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
} 
#端区
}
查看模型:
ListView绑定并显示项目(请参见下面的照片)

使用自定义控件;
使用模型;
使用MvvmHelpers.Commands;
使用棱镜导航;
使用Prism.Services;
使用System.Collections.Generic;
公共类MainPageViewModel:ViewModelBase
{
#区域构造函数
public Main PageViewModel(INavigationService navigationService、IPageDialogService pageDialogService、IDeviceService deviceService):基本(navigationService、pageDialogService、deviceService)
{
初始化();
}
#端区
#区域
公共手风琴节点ShakeOutlineMsaccordion{get;private set;}
公共命令OnShakeoutListItemSelectedCommand{get;private set;}
公共列表列表{get;private set;}=new List();
#端区
#区域
已选择ShakeOutListItem上的公共异步无效(SimpleListItem)
{
如果(item.Name==“添加筛出”)
等待NavigationService.NavigateAsync(“ShakeoutDocumentGeneratorPage”);
}
#端区
私有void初始化()
{
//命令
OnShakeoutListItemSelectedCommand=新命令(OnShakeoutListItemSelected);
//手风琴手
shakeOutlinemsaccordion=新的手风琴节点(“OverwritenView”,GlobalVariables.Accordion.Height,GlobalVariables.Accordion.HeaderBackgroundColor,GlobalVariables.Accordion.headercolorExtColor,GlobalVariables.Accordion.SeparatorColor);
//资料
添加(新的SimpleListItem{Name=“Add Shakeout”,Title=string.Empty,Type=string.Empty});
}
}
查看:
因为转换器类'itemtrapped'EventArgs,所以我将重点放在该事件上……但我可以更改它(如果需要)


手机图像:
如您所见,ViewModel正在绑定到数据

注:
升级到Behaviors.Forms 1.4会生成设计时错误

更新:
以下是我对投稿人提出的建议的更新

  • “在主单元格对象上点击手势”选项根本不会触发事件
  • “selected Item”事件引发…但不调用“Main PageViewModel OnShakeoutListItemSelected”事件
  • 我现在正在看NuGet中的“Corcav行为”

选项1:在主单元格对象上使用点击手势

<ListView
                        x:Name="lvShakeoutListItems"
                        HorizontalOptions="FillAndExpand"
                        VerticalOptions="FillAndExpand"
                        ItemsSource="{Binding ShakeoutListItems}"
                        RowHeight="40">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Style="{DynamicResource ListViewGridItemStyle}" RowSpacing="0" ColumnSpacing="0" Margin="13,0,0,0">
                            **<Grid.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding OnShakeoutListItemSelectedCommand}" CommandParameter="{Binding .}"/>
                            </Grid.GestureRecognizers>**
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="0.8*" />
                                <ColumnDefinition Width="150" />
                            </Grid.ColumnDefinitions>

                            <Label Grid.Row="0" Grid.Column="0"  Text="{Binding Name}" Style="{DynamicResource ListViewLabelCenterRowLeft}" TextColor="{StaticResource LabelValueTextColor}" Margin="0,10,0,0"/>
                        </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

<ListView
                        x:Name="lvShakeoutListItems"
                        HorizontalOptions="FillAndExpand"
                        VerticalOptions="FillAndExpand"
                        ItemsSource="{Binding ShakeoutListItems}"
            SelectedItem="{Binding SelctedItem}"
                        RowHeight="40">
...
</>


**
<ListView
                        x:Name="lvShakeoutListItems"
                        HorizontalOptions="FillAndExpand"
                        VerticalOptions="FillAndExpand"
                        ItemsSource="{Binding ShakeoutListItems}"
                        RowHeight="40">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Style="{DynamicResource ListViewGridItemStyle}" RowSpacing="0" ColumnSpacing="0" Margin="13,0,0,0">
                            **<Grid.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding OnShakeoutListItemSelectedCommand}" CommandParameter="{Binding .}"/>
                            </Grid.GestureRecognizers>**
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="0.8*" />
                                <ColumnDefinition Width="150" />
                            </Grid.ColumnDefinitions>

                            <Label Grid.Row="0" Grid.Column="0"  Text="{Binding Name}" Style="{DynamicResource ListViewLabelCenterRowLeft}" TextColor="{StaticResource LabelValueTextColor}" Margin="0,10,0,0"/>
                        </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

<ListView
                        x:Name="lvShakeoutListItems"
                        HorizontalOptions="FillAndExpand"
                        VerticalOptions="FillAndExpand"
                        ItemsSource="{Binding ShakeoutListItems}"
            SelectedItem="{Binding SelctedItem}"
                        RowHeight="40">
...
</>