Привязка команды к перенаправленному событию в пользовательском элементе управления WPF
Я хочу привязать команду Viewmodel к маршрутизируемому событию Usercontrol. Вот подробное объяснение того, что у меня есть.
У меня есть пользовательский элемент управления, который имеет один Image
(который показывает изображение) и один Button
на дне (Button
удалять Image
). Я использую Usercontrol в ListView
,
В коде моего Usercontrol у меня есть RoutedEventHandler
удалить Image
:
public event RoutedEventHandler RemoveImage;
В окне, где я использую этот Usercontrol, я поставил:
<uc:ucImageListItem x:Name="ImageListItem" RemoveImage="ImageListItem_RemoveImage" />
Этот код работает правильно, если мой код для удаления изображения находится в коде позади. но я хочу привязать команду Viewmodel к RemoveImage RoutedEvent.
Наверное, как (не правильно)
<uc:ucImageListItem x:Name="ImageListItem" RemoveImage="{binding CommandtoRemove}" />
Как этого добиться?
Я нашел что-то связанное с RoutedCommand
или же DependancyProperty
, но не смог найти правильного пути, как их использовать.
Дайте мне знать, если мне нужно больше прояснить мой вопрос. Спасибо в ожидании.
1 ответ
Привет этот кусок кода показывает, как вызвать команду:обработчик команд
public class CommandHandler : ICommand
{
public CommandHandler(Action<object> action,Func<object,bool> canexecute)
{
_action = action;
_canExecute = canexecute;
}
Action<object> _action;
Func<object, bool> _canExecute;
public bool CanExecute(object parameter)
{
return _canExecute(parameter);
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_action(parameter);
}
}
ViewModel
public class MainViewModel
{
private CommandHandler _buttonCommand;
public CommandHandler ButtonCommand
{
get
{
return _buttonCommand ?? (_buttonCommand = new CommandHandler((param) => OnButtonCommand(param),(param)=>true));
}
}
private void OnButtonCommand(object obj)
{
//DO things here whatever you want to do on Button click
}
}
Посмотреть
<Button Command="{Binding ButtonCommand}" Content="ok"/>
вам нужно передать два параметра в конструктор CommandHandler: один - действие, которое вы хотите запустить по команде, а второй параметр - func, который должен возвращать bool. Если func оценивается как true только тогда, запускается действие Command. И параметр в действии, а func - это то, что вы будете связывать с CommandParameter, в моем случае выше, он будет нулевым, так как я не связал CommandParameter. Я надеюсь, что это поможет.