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:
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; }