C# 未执行Behaviors.Forms命令
我正在尝试将现有的Xamarin项目升级到各种库的最新版本。Xamarin表单本身生活在一个共享库中。我的页面上有一个ListView&我试图捕获在“选择”项目时触发的事件。但是,我的ViewModel中的ICommand未执行 注: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.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行为”
<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">
...
</>