Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVVM中绑定事件并将事件参数作为命令参数传递_C#_.net_Wpf_Mvvm - Fatal编程技术网

C# 在MVVM中绑定事件并将事件参数作为命令参数传递

C# 在MVVM中绑定事件并将事件参数作为命令参数传递,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我想用ViewModel绑定一个事件 我曾经 clr命名空间:System.Windows.Interactivity;assembly=System.Windows.Interactivity 我也用了触发器 <Canvas Grid.Row="2" Grid.Column="2" x:Name="InteractiveCanvas" Style="{StaticResource canvasChartStyle}" ClipToBounds="True" >

我想用ViewModel绑定一个事件

我曾经

clr命名空间:System.Windows.Interactivity;assembly=System.Windows.Interactivity

我也用了触发器

  <Canvas Grid.Row="2" Grid.Column="2" x:Name="InteractiveCanvas" Style="{StaticResource canvasChartStyle}" ClipToBounds="True" >
        <intr:Interaction.Triggers>
            <intr:EventTrigger EventName="MouseEnter">
                <intr:InvokeCommandAction Command="AppointmentEditing" />
            </intr:EventTrigger>
        </intr:Interaction.Triggers>
    </Canvas>

但我需要使用事件参数。在这里我不能得到同样的结果

在wpf中,是否存在绑定事件和获取事件参数的可能性?不使用MVVM lite或PRISM


我只想使用CommandParameter获取事件参数

。全部如下:)


看看MVVM Light框架。它们的EventToCommand实现包括一个PassEventArgsToCommand选项


有关更多详细信息,请参阅和Laurent Bugnon的。

您可以通过添加DLL来实现:

  • System.Windows.interactivity
  • Microsoft.Expression.Interactions
在您的XAML中:

使用CallMethodAction类

使用
EventName
调用所需的事件;然后在
MethodName
中指定您的
Method
名称

<Window>
    xmlns:wi="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">

    <wi:Interaction.Triggers>
        <wi:EventTrigger EventName="SelectionChanged">
            <ei:CallMethodAction
                TargetObject="{Binding}"
                MethodName="ShowCustomer"/>
        </wi:EventTrigger>
    </wi:Interaction.Triggers>
</Window>

注:这是对这个问题的一个很晚的回答,但我希望它能帮助你。

使用CommandParameter是否足够?使用CommandParameter,我们如何将事件参数与CommandParameter绑定为什么你需要在视图模型中使用
EventArgs
?@MikeEason我想知道鼠标的位置,是否有相同的替代方案?但我们如何将mouseeventargs作为参数传递?请检查。这将有助于我不能在这里使用任何框架,你是否可以提出任何纯WPF的想法?使用框架有什么错?你为什么要重新发明轮子?我建议您最好下载MVVMLight源代码,并将相关类(EventToCommand.cs)复制到您自己的库中-@VisakhVA yes使用PassEventArgsToCommand=“True”,然后您必须更改一小部分作为您的命令。这样做无需添加另一个库即可获得事件参数。@hfann:我可以问一下如何操作?因为Interaction.Triggers、EventTrigger和CallMethodAction是上述程序集的一部分。当我提到libaray时,我指的是MVVMLight或Prism。我已经在使用System.Windows.Interactivityu DLL了。这实际上意味着需要使用上面提到的DLL。
<Window>
    xmlns:wi="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">

    <wi:Interaction.Triggers>
        <wi:EventTrigger EventName="SelectionChanged">
            <ei:CallMethodAction
                TargetObject="{Binding}"
                MethodName="ShowCustomer"/>
        </wi:EventTrigger>
    </wi:Interaction.Triggers>
</Window>
public void ShowCustomer()
//The method must be public & can take 0 parameters or 2 parameters i.e.
//object sender & EventArgs args
{
    // Do something.
}