参数为ListView ReactiveUI Xamarin Forms的BindCommand

参数为ListView ReactiveUI Xamarin Forms的BindCommand,listview,xamarin.forms,reactiveui,Listview,Xamarin.forms,Reactiveui,我将Reactiveui与xamarin表单一起使用。我有一个产品类别,它是一个可观察的集合,绑定到xaml页面上的listview。点击一个特定的产品类别,我需要得到子类别。下面是我的xaml文件、代码隐藏文件和viewmodel文件的代码。我无法获取单击的产品类别的Id Xaml文件 <ListView ItemsSource="{Binding ProductCategories}" HasUnevenRows="True" x:Name=&q

我将Reactiveui与xamarin表单一起使用。我有一个产品类别,它是一个可观察的集合,绑定到xaml页面上的listview。点击一个特定的产品类别,我需要得到子类别。下面是我的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 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; }
}
公共类ProductCategoryPageViewModel:ReactiveObject
{
私有IPProductCategoryService ProductCategoryService;
public ProductCategoryPageViewModel(IPProductCategoryService productCategoryService=null)
{
ProductCategoryService=ProductCategoryService???(IPProductCategoryService)Splat.Locator.Current.GetService(typeof(IPProductCategoryService));
GetProductCategories();
CMDGetSubProductCategories=ReactiveCommand.Create(x=>
{
获取子类别(x);
});
}
可观察收集(产品类别);;
公共可观测收集产品类别
{
获取=>\u产品类别;
设置{this.RaiseAndSetIfChanged(ref_productCategories,value);}
}
int_选择的ProductCategoryId;
public int SelectedProductCategoryId
{
get=>\u selectedProductCategoryId;
set=>this.RaiseAndSetIfChanged(ref\u selectedProductCategoryId,value);
}
公共异步void GetProductCategories()
{
var productCategories=await productcategorisyservice.GetAllProductCategories();
ProductCategories=新的ObservableCollection(ProductCategories);
}
公共异步void GetSubProductCategories(int-pcid)
{
var productCategories=await productcategorisyservice.GetSubProductCategories(pcid);
ProductCategories=新的ObservableCollection(ProductCategories);
}
public ReactiveCommand CMDGetSubProductCategories{get;}
}

我对xamarin forms和reactiveui不熟悉。感谢您的帮助。

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

xaml文件(添加了itemselectedevent)


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

您可以稍后标记此答案,这将帮助更多有相同问题的人:)。
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; }
}
<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>
private void listView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
        var model = e.SelectedItem as ProducCategoryMaster; 
        var vm = BindingContext as ProductCategoryPageViewModel;
        vm.SelectedProductCategoryId = model.PKProductCategoryId;
}