带附加事件的EventToCommand

时间:2013-07-01 09:23:40

标签: wpf events binding eventtocommand

我在TextBox的附加事件Validation.Error上使用。

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.

enter image description here

有人可以帮忙吗?

编辑:

我在ViewModel

中的命令
  public MyViewModel()
    {
        MyCmd = new RelayCommand<RoutedEventArgs>(Valid);
    }

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

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

2 个答案:

答案 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功能:) 无论如何,再次感谢您!