按钮:根据ClickMode值绑定不同的DelegateCommands(按下/释放)

时间:2009-07-27 20:40:17

标签: c# xaml mvvm binding delegatecommand

经常在这里找到答案,但现在是我的第一次;)

我们将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 ...

好的我尝试了以下内容,但它无法正常工作...... 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 如果我得到答案,我也会在这里发布。

非常感谢(提前), 托蒂

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您是否尝试在Binding中设置名称?

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