2009-07-27 2 views
0

Часто найдены ответы здесь, но теперь оно `s мой первый раз;)Кнопка: Привязка различных DelegateCommands в зависимости от значения ClickMode (нажатие/отпускание)

Мы используем шаблон MVVM в сочетании с DelegateCommands. Поэтому обычно я связать команду с кнопкой, как это:

<Button Command="{Binding SetXYZActivatedCommand}" /> 

Мне нужно выполнять различные команды, когда кнопка нажата и когда кнопка отпущена. Моя идея заключалась в следующем:

<Button Grid.Row="3" x:Name="TestButtonObj" Content="asdlknm"> 
    <Button.Template> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border x:Name="border" CornerRadius="80" Background="LightBlue"> 
       <ContentPresenter Name="content" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
       <Setter TargetName="border" Property="Background" Value="Aqua" /> 
       <Setter TargetName="content" Property="Content" Value="Pressed" /> 
       </Trigger> 
       <Trigger Property="ClickMode" Value="Press"> 
       <Setter TargetName="TestButtonObj" Property="Command" Value="{Binding SetPttDeactivatedCommand}" /> 
       </Trigger> 
       <Trigger Property="ClickMode" Value="Release"> 
       <Setter Property="Button.Command" Value="{Binding SetPttActivatedCommand}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Проблема в том, что TestButtonObj неизвестен. Хорошо, я принял, что я не могу получить доступ к родительскому объекту. Без TargetName = "TestButtonObj" он компилируется, но команда не выполняется. Mhhhh ...

Ok Я попытался следующие, но он не может работать ... CommandBinding не является свойством зависимостей (надеюсь, вы меня из этого лабиринта)

<Button Grid.Row="2" Content="CommandBindings"> 
<Button.CommandBindings> 
    <CommandBinding Command="{Binding SetPttActivatedCommand}" /> 
</Button.CommandBindings> 

В этом Я застрял. Я не знаю, был ли путь совершенно неправильным. Я прочитал весь день документы о командах и привязке, но я не понимаю. Надеюсь, кто-то может показать мне дорогу.

Я также разместил здесь сегодня утром: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cc68b10c-4e1c-4344-9f00-710185d4b1b0 Если я получу ответ, я отправлю его здесь.

Спасибо так много (заранее), Тотти

ответ

1

Вы должны использовать библиотеку AttachedCommandBehavior. Это позволит связать несколько команд с тем же контролем:

<Button Grid.Row="3" x:Name="TestButtonObj" Content="asdlknm"> 
    <local:CommandBehaviorCollection.Behaviors> 
    <local:BehaviorBinding Event="MouseLeftButtonDown" Action="{Binding SetPttDeactivatedCommand}" /> 
    <local:BehaviorBinding Event="MouseLeftButtonUp" Command="{Binding SetPttActivatedCommand}" /> 
    ... 
    </local:CommandBehaviorCollection.Behaviors> 
</Button> 
+0

Спасибо, хорошо выглядит. Надеюсь, у меня есть время, чтобы исследовать немного больше ... BTW Я не видел никакой информации о лицензии: можем ли мы ее использовать? в коммерческом приложении? – TottiW

+0

Я не думаю, что есть лицензия. Автор говорит: «Этот код не тестировался много, поэтому ожидайте ошибок и т. Д. Если вы хотите использовать это в производственном коде, вы делаете это на свой страх и риск» –

+0

Я не знаю, какова ваша конечная цель, но если вам нужно выполнить действие до тех пор, пока нажимается кнопка, вы можете взглянуть на ReapeatButton, он непрерывно запускает событие щелчка, пока он нажимается. –

0

Вы пытаетесь установить имя в Binding?

<Setter Property="Command" Value="{Binding ElementName=TestButtonObj, Path=SetPttDeactivatedCommand}" /> 
+0

Теперь я попытался это - но безуспешно :( 't Doesn даже остановить на точке останова в: общественного ICommand SetPttDeactivetedCommant где DelegateCommand должен быть экземпляр – TottiW

+0

Проверьте, является ли привязка двусторонним. Кроме этого, настройки не работают с именованными элементами за пределами шаблона ... –

+0

Связывание с TwoWay не было проблемой. Но в любом случае спасибо за помощь – TottiW