尝试在WPF中更改绑定的RadioButton时的奇怪行为
我已经在我的Child
窗口中将两个单选按钮绑定到我的ViewModel
的Enum
,它在主窗口中构建。 绑定按预期工作,但我注意到一个非常奇怪的行为,我无法解决。 我在这里提供了所有代码,因此您可以轻松地为自己重建问题。
以下是查看这种奇怪行为的步骤:
- 单击MainWindow中的按钮
- ChildWindow打开,RadioButton设置为User
- 选择自动,然后再次选择用户
- 关闭ChildWindow并重新打开它! 尝试将
RadioButton
更改为自动。 它不会改变!
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(string 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, }
更新:
我怀疑它一定是Converter
但我不知道为什么? 它只是陷入了一个循环。
编辑如何将枚举转换为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; }