Лично я бы использовал ListBox
и стилизовал бы его так, чтобы элементы были ToggleButtons
<Style x:Key="ToggleButtonListBoxStyle" TargetType="{x:Type ListBox}">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2, 2, 2, 0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border Background="Transparent">
<ToggleButton Content="{TemplateBinding ContentPresenter.Content}"
IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
<ListBox ItemsSource="{Binding MyOptions}"
SelectedItem="{Binding CurrentCheckedItem}"
Style="{StaticResource ToggleButtonListBoxStyle}"/>
Это позволит включать только одну кнопку за раз, и вы можете сделать CurrentCheckedItem
равно null
снятием отметки с выбранного ToggleButton
.
Это также немного очистит ваш код, потому что вам не нужно отслеживать 3 отдельных RelayCommands
, чтобы отслеживать изменения выбора.
В качестве примечания, ваш исходный код не работает, потому что свойство, установленное в <Tag>
элемента управления, имеет приоритет над свойством, установленным в DataTrigger
.Чтобы это работало, вам нужно установить значение по умолчанию (привязку) как установщик в <Style>
.Подробнее о приоритете свойства зависимости можно узнать здесь .