我不知道如何通过 CommandParameter 将单个属性传递给 ViewModel 中的 Command 函数。
现在我传递了整个对象(CategoryListItem),但我只需要来自 Id 属性的值。我怎样才能做到这一点?
班级:
public class CategoryListItem
{
public int Id { get; set; }
public int Order { get; set; }
public string Name { get; set; }
}
视图模型:
public ObservableRangeCollection<CategoryListItem> Listing
{
get => _listing;
set => SetProperty(ref _listing, value);
}
OnItemTappedCommand = new DelegateCommand<CategoryListItem>(OnItemTapped);
private async void OnItemTapped(CategoryListItem obj)
{
await _navigationService.GoBackAsync(new NavigationParameters
{
{ "CategoryId", obj.Id }
});
}
XAML:
<ListView
ItemsSource="{ Binding Listing }"
HasUnevenRows="false"
CachingStrategy="RecycleElement"
SeparatorColor="{ DynamicResource AccentColor }">
<ListView.Behaviors>
<b:EventToCommandBehavior
EventName="ItemTapped"
Command="{ Binding OnItemTappedCommand }"
CommandParameter="???"
EventArgsConverter="{ StaticResource ItemTappedEventArgsConverter }">
</b:EventToCommandBehavior>
</ListView.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label
Text="{ Binding Name }"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
FontSize="16" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
转换器:
public class ItemTappedEventArgsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is ItemTappedEventArgs itemTappedEventArgs))
{
throw new ArgumentException("error");
}
return itemTappedEventArgs.Item;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
欢迎任何想法!没有什么对我有用。