Как я могу прикрепить два прикрепленных поведения к одному элементу XAML? - PullRequest
0 голосов
/ 29 мая 2009

Я реализовал шаблон поведения присоединенной команды , найденный здесь , и он хорошо работает , чтобы разрешить, например, Граница, чтобы иметь событие левого или правого щелчка, которое вызывается во ViewModel:

XAML:

<Border Background="Yellow" Width="350" Margin="0,0,10,0" Height="35" CornerRadius="2"
        c:CommandBehavior.Event="MouseLeftButtonDown" 
        c:CommandBehavior.Command="{Binding PressedLeftButton}"
        c:CommandBehavior.CommandParameter="MainBorder123">
    <TextBlock Text="this is the click area"/>
</Border>

Код сзади:

public ICommand PressedLeftButton { get; private set; }

public MainViewModel()
{

    Output = "original value";

    PressedLeftButton = new SimpleCommand
    {
        ExecuteDelegate = parameterValue => {
            Output = String.Format("left mouse button was pressed at {0} and sent the parameter value \"{1}\"", DateTime.Now.ToString(), parameterValue.ToString());
        }
    };
}

Однако, как мне прикрепить два прикрепленных поведения к одному элементу , например, Я хочу сделать что-то вроде следующего, но это, конечно, дает мне ошибку:

<Border Background="Yellow" Width="350" Margin="0,0,10,0" Height="35" CornerRadius="2"
        c:CommandBehavior.Event="MouseLeftButtonDown" 
        c:CommandBehavior.Command="{Binding PressedLeftButton}"
        c:CommandBehavior.CommandParameter="MainBorder123"
        c:CommandBehavior.Event="MouseRightButtonDown" 
        c:CommandBehavior.Command="{Binding PressedRighttButton}"
        c:CommandBehavior.CommandParameter="MainBorder123"
        >

Ответы [ 2 ]

5 голосов
/ 29 мая 2009

Ссылка, которую вы отправили, содержит именно этот ответ. Вы можете использовать возможности CommandBehaviorCollection.Behaviors в ACB v2.

   <Border Background="Yellow" Width="350" Margin="0,0,10,0" Height="35" CornerRadius="2" x:Name="test">
       <local:CommandBehaviorCollection.Behaviors>
               <local:BehaviorBinding Event="MouseLeftButtonDown" Action="{Binding DoSomething}" CommandParameter="An Action on MouseLeftButtonDown"/>
               <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/>
       </local:CommandBehaviorCollection.Behaviors>
       <TextBlock Text="MouseDown on this border to execute the command"/>
   </Border>
0 голосов
/ 29 июля 2009

"это было, спасибо, забавно, хотя мой редактор XAML выдает мне ошибку" Не удалось найти присоединяемое свойство "Поведения" в типе CommandBehaviorCollection. "Хотя я могу нормально его запустить и скомпилировать, почему так? «

Причина в том, что код, который разрешает коллекцию поведения команд (которая является вложенным свойством collection ), является своего рода лазейкой XAML. Вы можете прочитать больше об этом здесь: http://wekempf.spaces.live.com/blog/cns!D18C3EC06EA971CF!468.entry?sa=276442122

...