Привязка команды к перенаправленному событию в пользовательском элементе управления 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. Я надеюсь, что это поможет.

Другие вопросы по тегам