带有参数 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;
}
其余代码与我在问题中发布的代码相同。
我正在使用带有 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;
}
其余代码与我在问题中发布的代码相同。