Wpf Binding + DataTrigger

Здравствуйте, у меня есть проблема с Binding и DataTrigger. Итак, мой код:

<tog:HorizontalToggleSwitch  Margin="0,10,15,0" HorizontalAlignment="Left"  >
<tog:HorizontalToggleSwitch.Style>
  <Style TargetType="{x:Type tog:HorizontalToggleSwitch}">
  <Setter Property="IsChecked" Value="{Binding Staff.isSelfie, Mode=TwoWay}"/>
     <Style.Triggers>
      <DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="True">
        <Setter Property="IsChecked" Value="True" />
        <Setter Property="IsEnabled" Value="False"/>
      </DataTrigger>
     <DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="False">
       <Setter Property="IsChecked" Value="False" />
       <Setter Property="IsEnabled" Value="True"/>
     </DataTrigger>
    </Style.Triggers>
    </Style>
 </tog:HorizontalToggleSwitch.Style>
 </tog:HorizontalToggleSwitch>

Как видите, у меня есть обязательное значение Staff.isSelfie в Собственности IsChecked, и я изменяю это в Datatrigger. Моя проблема в том, что я не получаю значение bool IsChecked в моей переменной Staff.isSelfie, DataTrigger работает, потому что переключатель переключается с выключенного на включенный, пока я нажимаю на элемент администратора, который является радиокнопкой. Код из Staff.isSelfie является:

bool _isSelfie;
    [DataMember]
    public bool isSelfie
    {
        get
        {
            return _isSelfie;
        }

        set
        {
            if (_isSelfie != value)
            {
                _isSelfie = value;
                OnPropertyChanged(nameof(isSelfie));
            }
        }
    }

которые реализуют INotifyPropertyChanged. Переменная Staff.isSelfie взять его значение из bool в моей базе данных, поэтому я хочу установить его в начале. Как я могу получить значение true или false из DataTrigger в мою переменную Staff.isSelfie? Что случилось? Большое спасибо.

1 ответ

Решение

<Setter Property="IsChecked" Value="False" /> удаляет существующую привязку Попробуйте прослушать события, когда Admin.IsChecked изменится, и соответственно обновите HorizontalToggleSwitch.IsChecked.

HorizontalToggleSwitch будет иметь только триггер для IsEnabled

<tog:HorizontalToggleSwitch IsChecked="{Binding Staff.isSelfie, Mode=TwoWay}"
                            Margin="0,10,15,0" HorizontalAlignment="Left">
<tog:HorizontalToggleSwitch.Style>
  <Style TargetType="{x:Type tog:HorizontalToggleSwitch}">
     <Style.Triggers>
      <DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="True">
        <Setter Property="IsEnabled" Value="False"/>
      </DataTrigger>
     <DataTrigger Binding="{Binding ElementName=Admin,Path=IsChecked}" Value="False">
       <Setter Property="IsEnabled" Value="True"/>
     </DataTrigger>
    </Style.Triggers>
    </Style>
 </tog:HorizontalToggleSwitch.Style>
 </tog:HorizontalToggleSwitch>

и вот пример изменения IsChecked с 2 CheckBoxes:

<CheckBox Content="Admin" Name="Admin" 
          Checked="Admin_CheckedChanged" Unchecked="Admin_CheckedChanged"/>
<CheckBox Name="ToggleSwitch" IsChecked="{Binding Path=isSelfie}" Content="???"/>
private void Admin_CheckedChanged(object sender, RoutedEventArgs e)
{
    ToggleSwitch.SetCurrentValue(CheckBox.IsCheckedProperty, Admin.IsChecked);
}
Другие вопросы по тегам