MVVM查看事件视图模型命令绑定(MVVM View event Viewmodel command

2019-06-25 12:19发布

我正在寻找一个良好的(阅读:简单)就如何落实与棱镜事件聚合的例子。 我从来没有使用棱镜和我也很新的MVVM本身。

我有一个WPF画布视图,我想处理的视图模型画布上的MouseUp事件。 现在,是我们组织的权力要我用棱镜,显然棱镜建议使用事件聚合,这就是为什么我需要让我开始一个样本。

Answer 1:

所有你需要的是从MVVMLight或System.Windows.Interactivity(混合SDK)的EventToCommand行为。 我建议你采取MVVMLight版本,因为它有一些有用的特价:)

<Canvas>
<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseUp" >
        <i:InvokeCommandAction Command="{Binding YourMouseUpViewModelCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>

EventAggregator从棱镜我主要用于分离视图模型视图模型来沟通。



Answer 2:

我不知道PRISM的EventAggregator允许的事件 - >命令绑定。

在这种情况下,你的另一个选择是使用“行为”。 这里有一个体面的概述行为: http://wpftutorial.net/Behaviors.html 。 您可以忽略本教程的混合部分; 重要的是,你必须安装至少3混合SDK。 以下是我这样做:

public class ButtonDoubleClickCommandBehavior : Behavior<Button>
{
    public ICommand DoubleClickCommand
    {
        get { return (ICommand)GetValue(DoubleClickCommandProperty); }
        set { SetValue(DoubleClickCommandProperty, value); }
    }

    public static readonly DependencyProperty DoubleClickCommandProperty =
        DependencyProperty.Register("DoubleClickCommand", typeof(ICommand), typeof(ButtonDoubleClickCommandBehavior));

    protected override void OnAttached()
    {
        this.AssociatedObject.MouseDoubleClick += AssociatedObject_MouseDoubleClick;
    }

    protected override void OnDetaching()
    {
        if (this.AssociatedObject != null)
        {
            this.AssociatedObject.MouseDoubleClick -= AssociatedObject_MouseDoubleClick;
        }
    }

    void AssociatedObject_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        if (DoubleClickCommand != null && DoubleClickCommand.CanExecute(null))
        {
            DoubleClickCommand.Execute(null);
        }
    }
}

你可以依赖的另一个属性添加到行为绑定命令参数,以便您可以执行与该参数的命令; 我只是在我的例子中使用空。

而我的XAML:

<Button Content="{Binding Path=Description}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Template="{StaticResource TextBlockButtonTemplate}" Style="{StaticResource ZynCommandButton}" Tag="DescriptionButton">
    <e:Interaction.Behaviors>
        <ZViewModels:ButtonDoubleClickCommandBehavior DoubleClickCommand="{Binding Path=ItemDescriptionCommand}"/>
    </e:Interaction.Behaviors>
</Button>


Answer 3:

使用行为更通用的方法,提出了在AttachedCommandBehavior V2又名ACB它甚至还支持多种事件到命令绑定,

下面是使用一个非常简单的例子:

<Border local:CommandBehavior.Event="MouseDown"  
        local:CommandBehavior.Command="{Binding DoSomething}"
        local:CommandBehavior.CommandParameter="From the DarkSalmon Border"
/>


文章来源: MVVM View event Viewmodel command binding