如何使用MVVM时,必须通过事件参数为interaction.Trigger参数?(How to p

2019-09-17 08:54发布

基本上,我在我的自定义类的事件。 我将调用自定义类的特定方法与事件的说法 - >属性作为该方法的参数。

你可以看到背后这个信息的实际代码。

instance.FileOpening += (sender, e) =>
                {
                    CustomClass.Method(e.XXproperty, e.YYproperty);
                };

但我想通过在MVVM interaction.Triggers实现这一目标。 所以我用在XAML下面的代码。

<i:Interaction.Triggers>
     <i:EventTrigger EventName="FileOpening">
          <i:FileOpeningAction TargetObject="{Binding ElementName=cntrol}"/>
     </i:EventTrigger>
</i:Interaction.Triggers>

我相应TargetedTriggerAction类是在这里让我customclass要执行的方法。

public class FileOpeningAction :TargetedTriggerAction<CustomClass>
    {
        protected override void Invoke(object parameter)
        {
            ((instance).TargetObject).Method(?,?);
        }
    }

但我的问题是如何传递的e.XXproperty和e.YYproperty在上述行动中执行我的自定义类中的方法?

Answer 1:

你可以尝试使用也互动库,那么你可以这样写:

<i:EventTrigger EventName="FileOpening">
    <ei:CallMethodAction TargetObject="{Binding}" MethodName="OnFileOpening"/>
</i:EventTrigger>

而在你的代码会是这样的

public void OnFileOpening(object sender, EventArgs e){//your code}


Answer 2:

如果你按照下面给出的,那么你可以通过设置“PassEventArgsToCommand”传递事件参数的命令。

添加引用:

xmlns:cmd="xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4""

<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseEnter" >
         <cmd:EventToCommand Command="{Binding FooCommand}"
             PassEventArgsToCommand="True" />
    </i:EventTrigger>
</i:Interaction.Triggers>


文章来源: How to pass a event argument as a parameter in interaction.Trigger when using MVVM?
标签: wpf mvvm