2017-08-24 2 views
0

Bonjour J'ai un problème avec Binding et DataTrigger. Donc, mon code est:Wpf 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> 

Comme vous pouvez le voir, j'ai une valeur contraignante Staff.isSelfie à IsChecked la propriété et je le change dans le DataTrigger. Mon problème est que je ne reçois pas la valeur booléenne de IsChecked à ma variable Staff.isSelfie. DataTrigger fonctionne parce que le commutateur passe de désactivé à activé pendant que je clique sur l'élément d'administration qui est un radiobutton. Le code de Staff.isSelfie est:

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

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

qui mettent en œuvre INotifyPropertyChanged. La variable Staff.isSelfie prend sa valeur d'un bool dans ma base de données c'est pourquoi je veux le mettre au début. Comment puis-je obtenir la valeur true ou false de DataTrigger à ma variable Staff.isSelfie? Qu'est-ce qui ne va pas? Merci beaucoup.

Répondre

0

<Setter Property="IsChecked" Value="False" /> supprime la liaison existante. Essayez d'écouter les événements lorsque Admin.IsChecked change et mettez à jour HorizontalToggleSwitch.IsChecked en conséquence.

HorizontalToggleSwitch aura déclenchement seulement pour 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> 

et voici un exemple de changement isChecked avec 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); 
}