MVVM Просмотр события Привязка команды Viewmodel

Я ищу хороший (читай: простой) пример того, как реализовать агрегаторы событий с помощью Prism. Я никогда не использовал Prism, и я также довольно новичок в самой MVVM.

У меня есть холст WPF в качестве представления, и я хочу обработать событие MouseUp на холсте в модели представления. Теперь власти нашей организации хотят, чтобы я использовал Prism, и, видимо, Prism рекомендует использовать агрегаторы событий, поэтому для начала мне нужен образец.

Ответы на вопрос(3)

что вам нужно для этого, - это поведение EventToCommand из MVVMLight или из System.Windows.Interactivity (Blend SDK). я бы порекомендовал вам взять версию MVVMLight, потому что она имеет некоторые полезные особенности :)

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

EventAggregator от Prism, который я в основном использовал для связи Viewmodel с Viewmodel.

что EventAggregator PRISM допускал привязку событий к командам.

Другой вариант для вас в этом случае - использовать «поведение». Вот хороший обзор поведения:http://wpftutorial.net/Behaviors.html, Вы можете игнорировать Blend часть урока; важно то, что у вас установлен хотя бы Blend 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>

AttachedCommandBehavior V2, также известный как ACB и он даже поддерживает несколько привязок событий к командам,

Вот очень простой пример использования:

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

Ваш ответ на вопрос