我在页面上绑定了一个CollectionView,其中包含每个记录的ImageButton控件。我正在尝试为Clicked事件添加一个处理程序,该事件将参数传递给Command。由于CollectionView有自己的DataTemplate/DataType,我相信我必须在命令的绑定上使用RelativeSource选项。
一旦CollectionView加载,我就会在应用程序级别获得一个讨厌的未处理异常(由于对象的当前状态,操作无效)。
x1c 0d1x的数据
我试过所有的模式。
我已经尝试了路径只是PdfViewCommand,BindingContext.PdfViewCommand和它下面。
我也尝试过不带参数的情况下,行为没有任何变化。
请注意,在RelayCommand被命中之前,异常就会弹出。
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="model:PatientEd">
<VerticalStackLayout BackgroundColor="Transparent" Margin="2" >
<ImageButton Source="{Binding PatientEdThumbUri}" HeightRequest="85" Margin="2" CornerRadius="10" HorizontalOptions="Center" BorderColor="White" BorderWidth="2" ToolTipProperties.Text="{Binding PatientEdName}">
<ImageButton.Behaviors>
<toolkit:EventToCommandBehavior
EventName="Clicked"
Command="{Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type viewmodel:PatientEdViewModel}}, Path=PatientEdViewModel.PdfViewCommand}"
CommandParameter="{Binding PatientEdPdfUri}" />
</ImageButton.Behaviors>
</ImageButton>
<Label Text="{Binding PatientEdName}" HorizontalTextAlignment="Center" FontSize="Caption" HeightRequest="30" WidthRequest="100" HorizontalOptions="Center" />
</VerticalStackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
字符串
更新:我从UnhandledException调用的e参数中发现了这个堆栈跟踪,对我来说并不意味着什么。
在Microsoft.Maui.Controls.Binding.d__27.MoveNext()在System.Threading.Tasks.Task.<>c.b__128_0(对象状态)在Microsoft.UI.Dispatching.DispatcherWorkueSynchronizationContext.<> c__DisplayClass2_0.b_0()
最新消息:现在CollectionView加载时没有异常,点击任何ImageButton都没有效果。我的命令设置与你的例子不同。我的命令是异步的,我使用[RelayCommand]装饰。
[RelayCommand]
async Task PdfViewAsync(Object obj)
{
if (IsBusy)
return;
try
{
IsBusy = true;
var model = obj as PatientEd;
// Do stuff
}
catch (Exception ex)
{
Debug.WriteLine($"Unable to get Patient titles: {ex.Message}");
await Shell.Current.DisplayAlert("Error!", ex.Message, "OK");
}
finally
{
IsBusy = false;
}
}
型
我在其他处理程序中使用了这种安排(对于Pickers),效果很好。这种安排对于ImageButton有什么不同吗?我在方法的顶部有一个断点,当我点击其中一个按钮时,它不会被击中。
1条答案
按热度按时间v64noz0r1#
可以将
CollectionView
的整个项作为命令PdfViewCommand
的参数传递给ViewModel。请参考下面的代码:
字符串
备注:
myCollectionView
是您的收藏中的x:Name
视图。然后,我们可以得到如下所示的传递参数:
型