我在TextBox的附加事件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>
所以我找到了一种方法,你可以在下面的链接中看到它:
Attached an mvvm event to command to an attached event
但是我收到了一个错误:
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
}
答案 0 :(得分:4)
基于您发布的链接
课程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>
它应该没问题
答案 1 :(得分:0)
感谢您分享RoutedEventTrigger的实现。 我知道这是一个非常古老的旧帖子。 我在WPF中的VS 2017和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功能:) 无论如何,再次感谢您!