Триггер привязки данных команды Wpf ToggleButton

У меня есть кнопка-переключатель с двумя триггерами данных, привязанными к свойству кнопки 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>

Я хотел бы, чтобы при первом нажатии кнопки запускалась команда Build, а при втором нажатии кнопки запускалась команда CancelBuild.


person jfin3204    schedule 07.03.2014    source источник
comment
Может лучше попробовать создать общую команду и передать в CommandParametr значение свойства IsChecked?   -  person Anatoliy Nikolaev    schedule 07.03.2014


Ответы (1)


Будь проще:

<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>

ViewModel:

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();
    }
} 
person Federico Berasategui    schedule 07.03.2014
comment
Спасибо. Все увлеклись попыткой переключить команду в триггере и даже не подумали о привязке к свойству IsChecked. - person jfin3204; 09.03.2014