Прежде всего, не совсем понятно, что «этот AdaptiveGridView показывает список избранных контактов, и вместо обработки события ItemClick я решил использовать команду». Означает ли это, что «показать список избранных контактов» - это только itemsSource, или когда вы обрабатываете событие ItemClick, «список избранных контактов» изменится?
Но про «передать выбранный контакт в качестве параметра команды» вы можете прочитать следующий код:
Сначала в XAML:
<uwpkit:AdaptiveGridView ItemsSource="{x:Bind ViewModel.FavoriteContacts}"
IsItemClickEnabled="True"
ItemClickCommand="{x:Bind ViewModel. ExecuteCommand}">
Далее вы можете создать командный класс следующим образом:
public class RelayCommand : ICommand
{
public Contact selectedContact;
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public event EventHandler CanExecuteChanged;
public RelayCommand(Action execute)
: this(execute, null)
{
}
public RelayCommand(Action execute, Func<bool> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute();
}
public void Execute(object parameter)
{
selectedContact = parameter as Contact;
_execute();
}
public void RaiseCanExecuteChanged()
{
var handler = CanExecuteChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
Затем в вашей ViewModel вы можете Инициализировать класс команды как свойство:
public RelayCommand ExecuteCommand { get; set; }
, это свойство привязано к «ItemClickCommand» в XAML. Также вы можете инициализировать ExecuteCommand и передать событие MyItemClick в команду:
public ContactViewModel() { ExecuteCommand = new RelayCommand(MyItemClick); }
в конструкторе ViewModel.
Наконец, вы можете видеть, что в команде есть метод public void Execute (параметр объекта). Он имеет один параметр, который можно использовать для передачи информации, связанной с UIElement, от вызывающей стороны к команде. Это означает, что когда вы щелкаете по элементу, он будет запущен, и объект «Контакт» будет передан этим методом. Затем вы можете сохранить его. Поэтому, когда вы щелкаете по элементу, метод «MyItemClick» будет активирован, и вы можете используйте объект Contact, который вы сохранили в методе Execute, например:
private void MyItemClick(){
Contact contact = ExecuteCommand.selectedContact;
//do something when clicked
}
Если у вас все еще есть проблема, пожалуйста, поделитесь более подробной информацией о вашем коде, например демонстрацией с возможностью воспроизведения.