带有参数 ListView ReactiveUI Xamarin Forms 的 BindCommand

BindCommand With Parameter ListView ReactiveUI Xamarin Forms

我正在使用带有 xamarin 表单的 Reactiveui。我有产品类别,它是一个可观察的集合,已绑定到 xaml 页面上的列表视图。单击特定产品类别时,我需要获取子类别。以下是我的 xaml 文件、代码隐藏文件和 viewmodel 文件的代码。我无法获取点击的产品类别的Id。

Xaml 文件

<ListView ItemsSource="{Binding ProductCategories}" HasUnevenRows="True" x:Name="lvProductCategories" SelectedItem="{Binding SelectedProductCategoryId}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ImageCell 
                            Text="{Binding CategoryName}">
                        </ImageCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
</ListView>

代码隐藏文件

public ProductCategoryPage()
{
            InitializeComponent();
            BindingContext = ViewModel = new ProductCategoryPageViewModel();

            this.BindCommand(ViewModel, vm => vm.CMDGetSubProductCategories, page => page.lvProductCategories, vm => vm.SelectedProductCategoryId ,nameof(lvProductCategories.ItemTapped));
}

视图模型文件

public class ProductCategoryPageViewModel : ReactiveObject
{
            private IProductCategoryService ProductCategoryService;
            public ProductCategoryPageViewModel(IProductCategoryService productCategoryService = null)
            {
                ProductCategoryService = productCategoryService ?? (IProductCategoryService)Splat.Locator.Current.GetService(typeof(IProductCategoryService));
                GetProductCategories();
    
                CMDGetSubProductCategories = ReactiveCommand.Create<int>(x =>
                {
                    GetSubProductCategories(x);
                });
    
               
            }
    
    
            ObservableCollection<ProductCategoryMaster> _productCategories;
            public ObservableCollection<ProductCategoryMaster> ProductCategories
            {
                get => _productCategories;
                set { this.RaiseAndSetIfChanged(ref _productCategories, value); }
            }
    
            int _selectedProductCategoryId;
            public int SelectedProductCategoryId
            {
                get => _selectedProductCategoryId;
                set => this.RaiseAndSetIfChanged(ref _selectedProductCategoryId, value);
            }
    
            
            public async void GetProductCategories()
            {
                var productCategories = await ProductCategoryService.GetAllProductCategories();
                ProductCategories = new ObservableCollection<ProductCategoryMaster>(productCategories);
            }
    
            public async void GetSubProductCategories(int pcid)
            {
                var productCategories = await ProductCategoryService.GetSubProductCategories(pcid);
                ProductCategories = new ObservableCollection<ProductCategoryMaster>(productCategories);
            }
    
            public ReactiveCommand<int,Unit> CMDGetSubProductCategories { get; }
}

我是 xamarin 表单和 reactui 的新手。谢谢你的帮助。

对于遇到此问题的任何人,我使用以下方法解决了它。

xaml 文件(添加了项目selectedevent)

<ListView ItemsSource="{Binding ProductCategories}" HasUnevenRows="True" x:Name="lvProductCategories" SelectedItem="{Binding SelectedProductCategoryId}" ItemSelected="listView_ItemSelected">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ImageCell 
                            Text="{Binding CategoryName}">
                        </ImageCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
</ListView>

Xaml.cs 文件

private void listView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
        var model = e.SelectedItem as ProducCategoryMaster; 
        var vm = BindingContext as ProductCategoryPageViewModel;
        vm.SelectedProductCategoryId = model.PKProductCategoryId;
}

其余代码与我在问题中发布的代码相同。