参数为ListView ReactiveUI Xamarin Forms的BindCommand
我将Reactiveui与xamarin表单一起使用。我有一个产品类别,它是一个可观察的集合,绑定到xaml页面上的listview。点击一个特定的产品类别,我需要得到子类别。下面是我的xaml文件、代码隐藏文件和viewmodel文件的代码。我无法获取单击的产品类别的Id Xaml文件参数为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
<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;
}