如何解决具有参数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));
}
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 举报,一经查实,本站将立刻删除。