EventToCommand с прикрепленным событием

Я использую на прикрепленном мероприятии Validation.Error текстового поля.

Ошибка проверки

Я хочу связать это с EventToCommand,

Обычно это не работает:

 <TextBox Height="20" Width="150" Text="{Binding MyProperty,NotifyOnValidationError=True,ValidatesOnDataErrors=True}" ><!--Validation.Error="TextBox_Error"-->
     <i:Interaction.Triggers>
        <i:EventTrigger EventName="Validation.Error">
           <mvvm:EventToCommand Command="{Binding MyCmd}" PassEventArgsToCommand="True" ></mvvm:EventToCommand>
        </i:EventTrigger>
     </i:Interaction.Triggers>
  </TextBox>

Итак, я нашел способ сделать это, вы можете увидеть его по ссылке ниже:

Прикрепленное событие mvvm для команды к присоединенному событию

Но я получаю ошибку:

RoutedEventConverter cannot convert from System.String.

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ:

Моя команда в ViewModel

  public MyViewModel()
    {
        MyCmd = new RelayCommand<RoutedEventArgs>(Valid);
    }

    public RelayCommand<RoutedEventArgs> MyCmd { get; set; }

    private void Valid(RoutedEventArgs args)
    {
        //Do something
    }

2 ответа

Решение

Основываясь на ссылке, которую вы разместили,

Класс RoutedEventTrigger ожидает RoutedEvent и ваш xaml не может преобразовать строку Validation.Error до требуемого типа.

так что переключайтесь

<i:Interaction.Triggers>
  <view_model:RoutedEventTrigger RoutedEvent="Validation.Error">
    <mvvm:EventToCommand Command="{Binding MyCmd}" PassEventArgsToCommand="True" />
  </view_model:RoutedEventTrigger>
</i:Interaction.Triggers>

в

<i:Interaction.Triggers>
  <view_model:RoutedEventTrigger RoutedEvent="{x:Static Validation.ErrorEvent}">
    <mvvm:EventToCommand Command="{Binding MyCmd}" PassEventArgsToCommand="True" />
  </view_model:RoutedEventTrigger>
</i:Interaction.Triggers>

и это должно быть хорошо

Спасибо за то, что вы поделились реализацией RoutedEventTrigger. Я знаю, что это очень старый старый пост. Я пробовал это решение с VS 2017, в WPF, с MVVM Light 5.4.1. Мне даже не нужно было менять код, как ответил @Viv. Вот мой XAML:

    <i:Interaction.Triggers>
        <local:RoutedEventTrigger
            RoutedEvent="ToggleButton.Checked">
            <ml:EventToCommand
                Command="{Binding TestCommand}"
                PassEventArgsToCommand="True" />
        </local:RoutedEventTrigger>
    </i:Interaction.Triggers>

Я использовал Grid, чтобы содержать несколько элементов управления CheckBox, который происходит от ToggleButton. Свойство RoutedEvent имеет тип "RoutedEvent". Я отражал тип RoutedEvent. Существует атрибут [TypeConverter], который выглядит следующим образом

[TypeConverter("System.Windows.Markup.RoutedEventConverter, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null")]

Может быть, это новая функция.NET, я думаю:) В любом случае, СПАСИБО СНОВА!

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