2013-12-18 4 views
0

Я пытаюсь изменить ToggleButton Команда, когда она cahnges это IsChecked собственности. Мой XAML выглядит так:ToggleButton trigger on IsChecked

<ToggleButton Content="Profile" Command="{Binding Path=ShowProfileMappingCommand}" CommandParameter="{Binding Path=ProfileMappingParameter}"> 
       <ToggleButton.Style> 
        <Style TargetType="ToggleButton"> 
         <Style.Triggers> 
          <Trigger Property="IsChecked" Value="True"> 
           <Setter Property="Command" Value="{Binding Path=ShowProfileMappingCommand}" /> 
          </Trigger> 
          <Trigger Property="IsChecked" Value="False"> 
           <Setter Property="Command" Value="{Binding Path=HideProfileMappingCommand}" /> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </ToggleButton.Style> 
      </ToggleButton> 

К сожалению, это не работает. Мой Commands никогда не вызывается. Любые идеи, почему это может быть так?

+1

Почему вы не просто передаете свойство 'Bool IsChecked' в качестве параметра команды? Похоже, вы слишком смущаетесь этим, имея 2 разных команды, IMO; –

+0

Вы можете создать свойство в своей ViewModel с именем IsChecked. Затем в XAML привяжите свойство IsChecked объекта ToggleButton к свойству IsChecked в вашей ViewModel. В заданной части свойства проверьте значение = true. Таким образом, вся логика попадает в setter в свойство, с которым элемент управления связан с ViewModel. – kformeck

+0

@HighCore Хорошая точка. Я подумаю об этом. –

ответ

0

IMO Я согласен с HighCore, что это кажется сложным. Однако, если это должно быть сделано, как вы его (который я думаю можно сделать), то просто догадка, попробуйте относительный источник привязки, как:

Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.ShowProfileMappingCommand}" 

Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.HideProfileMappingCommand}" 

ИДК, если это XAML находится в UserControl или странице, вам придется изменить тип ancestorType на тип элемента управления, который вы используете здесь. Это может или не поможет.

Установка inline: Command = "{Binding Path = ShowProfileMappingCommand}" может также вызвать проблемы одновременно с использованием datatriggers.

+0

Да, вы были правы, установив свойство Command как в триггерах, так и в строке, они не работали. И да, вы оба правы относительно параметра команды. Я не знаю, о чем я думал, пытаясь использовать две отдельные команды. –

Смежные вопросы