微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有参数ListView ReactiveUI Xamarin形式的BindCommand

如何解决具有参数ListView ReactiveUI Xamarin形式的BindCommand

我正在将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 ProductCategoryPage()
{
            InitializeComponent();
            BindingContext = viewmodel = new ProductCategoryPageviewmodel();

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

viewmodel文件

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文件(添加了itemselectedevent)

<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;
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。