Wpf ToggleButton 命令绑定数据触发器

jfi*_*204 0 data-binding wpf datatrigger

我有一个切换按钮,它有两个绑定到按钮 IsChecked 属性的数据触发器。在数据触发器中,我设置按钮内容及其命令属性。我遇到的问题是,当您单击按钮时,数据触发器正在更改命令值,然后触发命令。是否可以先命令触发,然后再触发数据?这是代码。

 <ToggleButton x:Name="commandToggleButton" Grid.Row="0"  Height="30" HorizontalAlignment="Left" Margin="26,24,0,0"  VerticalAlignment="Top" Width="75">
                <ToggleButton.Style>
                    <Style TargetType="ToggleButton">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=commandToggleButton, Path=IsChecked}" Value="False">
                                <Setter Property="Content" Value="Build" />
                                <Setter Property="FontWeight" Value="Bold" />
                                <Setter Property="Command" Value="{Binding Build}" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=commandToggleButton, Path=IsChecked}" Value="True">
                                <Setter Property="Content" Value="Cancel" />
                                <Setter Property="FontWeight" Value="Bold" />
                                <Setter Property="Command" Value="{Binding CancelBuild}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ToggleButton.Style>
            </ToggleButton>
Run Code Online (Sandbox Code Playgroud)

我希望发生的是,当第一次单击按钮时将触发 Build 命令,然后第二次单击按钮时将触发 CancelBuild 命令。

Fed*_*gui 5

把事情简单化:

<ToggleButton IsChecked="{Binding EnableBuild}" FontWeight="Bold">
   <ToggleButton.Style>
        <Style TargetType="ToggleButton">
            <Style.Triggers>
               <Trigger Property="IsChecked" Value="False">
                   <Setter Property="Content" Value="Build" />
               </Trigger>

               <Trigger Property="IsChecked" Value="True">
                  <Setter Property="Content" Value="Cancel" />
               </Trigger>
            </Style.Triggers>
         </Style>
   </ToggleButton.Style>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)

视图模型:

public Command Build {get;set;}
public Command Cancel {get;set;}

//...

private bool _enableBuild;
public bool EnableBuild
{
    get { return _enableBuild; }
    set
    {
       _enableBuild = value;
       NotifyPropertyChange(() => EnableBuild);

       if (value)
          Build.Execute();
       else
          Cancel.Execute();
    }
} 
Run Code Online (Sandbox Code Playgroud)