Comportement étrange lorsque vous essayez de changer un RadioButton lié dans WPF

J’ai lié deux boutons radio dans ma fenêtre Child à un ViewModel dans mon ViewModel qui est construit dans la fenêtre principale. La liaison fonctionne comme prévu, mais j’ai remarqué un comportement très étrange que je ne peux pas résoudre. J’ai fourni tout le code ici afin que vous puissiez reconstruire le problème facilement pour vous-même.

Voici les étapes pour voir ce comportement étrange:

  1. Cliquez sur le bouton dans la fenêtre principale
  2. ChildWindow s’ouvre et le bouton RadioButton est défini sur Utilisateur.
  3. Choisissez Automatique, puis choisissez à nouveau l’utilisateur
  4. Fermez la ChildWindow et rouvrez-la! Essayez de changer le RadioButton en automatique. Ça ne changera pas!
   
  public partial class MainWindow { public MainWindow() { InitializeComponent(); var viewModel = new ViewModel(); DataContext = viewModel; } private void DisplayChildWindow(object sender, RoutedEventArgs e) { var win = new ChildWindow {DataContext = (ViewModel) DataContext}; win.ShowDialog(); } } 
           
  public class ViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private CalcMode calcMode = CalcMode.User; public CalcMode CalcMode { get { return calcMode; } set { calcMode = value; RaisePropertyChanged("CalcMode"); } } private void RaisePropertyChanged(ssortingng propertyName) { var handler = PropertyChanged; if (handler == null) return; handler(this, new PropertyChangedEventArgs(propertyName)); } } 
  public class EnumBooleanConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var paramEnum = parameter as Enum; var valueEnum = value as Enum; return Equals(paramEnum, valueEnum); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var parameterEnum = parameter as Enum; if (parameterEnum == null) return DependencyProperty.UnsetValue; return parameterEnum; } } public enum CalcMode : byte { Automatic, User, } 

METTRE À JOUR:

Je soupçonne que ce doit être le Converter mais je ne sais pas pourquoi? Il tombe juste dans une boucle.

EDIT Qu’en est-il de la conversion de l’énum en bool?

 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (parameter == null || !(bool)value) return DependencyProperty.UnsetValue; var parameterEnum = parameter as Enum; return parameterEnum; }