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, я думаю:) В любом случае, СПАСИБО СНОВА!