.NET MAUI 8中如何将ItemsViewScrolledEventArgs传入ViewModel函数
在.NET MAUI中传递CollectionView Scrolled事件的ItemsViewScrolledEventArgs到ViewModel
解决方案
利用MAUI Community Toolkit的EventToCommandBehavior自带的参数传递能力,无需复杂的附加属性,就能直接把事件参数传给ViewModel的命令。
步骤1:ViewModel中定义接收参数的RelayCommand
基于CommunityToolkit.Mvvm库的RelayCommand,定义带ItemsViewScrolledEventArgs参数的处理方法:
using CommunityToolkit.Mvvm.Input; using Microsoft.Maui.Controls; public class YourViewModel : ObservableObject { [RelayCommand] public void OnScrolled(ItemsViewScrolledEventArgs e) { // 直接获取核心属性LastVisibleItemIndex int lastVisibleIndex = e.LastVisibleItemIndex; // 编写你的业务逻辑代码 } }
步骤2:修改XAML中的EventToCommandBehavior配置
删除手动填写的CommandParameter,添加PassEventArguments="True"属性,让行为自动传递事件触发时的参数:
<!-- 确保已引入toolkit命名空间 --> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" x:Class="YourProjectNamespace.YourPage"> <CollectionView ItemsSource="{Binding YourDataSource}"> <CollectionView.Behaviors> <toolkit:EventToCommandBehavior EventName="Scrolled" Command="{Binding OnScrolledCommand}" PassEventArguments="True" /> </CollectionView.Behaviors> <!-- 此处配置CollectionView的ItemTemplate等内容 --> </CollectionView> </ContentPage>
必要前提
- 已安装
CommunityToolkit.MauiNuGet包,并在MauiProgram.cs中初始化:
builder.UseMauiApp<App>().UseMauiCommunityToolkit();
RelayCommand会自动生成对应命令属性(如示例中的OnScrolledCommand),需与XAML绑定的命令名称保持一致。
内容的提问来源于stack exchange,提问作者Mateusz Rosiński
相关产品推荐
相关产品推荐

