尝试更改 WPF 中绑定的 RadioButton 时出现奇怪的行为

2023-12-02

我在我的中绑定了两个单选按钮Child窗口到Enum in my ViewModel它是在主窗口中构建的。绑定按预期工作,但我注意到一个非常奇怪的行为,我无法解决。我在这里提供了所有代码,以便您可以轻松地自己重构问题。

以下是查看这种奇怪行为的步骤:

  1. 单击主窗口中的按钮
  2. 子窗口打开,单选按钮设置为用户
  3. 选择自动,然后再次选择用户
  4. 关闭 ChildWindow 并再次重新打开它!尝试改变RadioButton至自动。不会改变!
    <Window x:Class="RadioButtonBinding.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">

        <Button Content="Display Child Window" Click="DisplayChildWindow"/> 
    </Window>
    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();
        }
    }
    <Window x:Class="RadioButtonBinding.ChildWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:radioButtonBinding="clr-namespace:RadioButtonBinding"
            Title="ChildWindow" Height="300" Width="300">
        <Window.Resources>
            <radioButtonBinding:EnumBooleanConverter x:Key="EnumBooleanConverter"/>
        </Window.Resources>

        <StackPanel>
            <RadioButton Content="Automatic" 
                         GroupName="CalcMode"
                         IsChecked="{Binding Path=CalcMode, 
                                             Converter={StaticResource EnumBooleanConverter}, 
                                             ConverterParameter={x:Static radioButtonBinding:CalcMode.Automatic}}"/>

            <RadioButton Content="Custom"
                         GroupName="CalcMode"
                         IsChecked="{Binding Path=CalcMode, 
                                             Converter={StaticResource EnumBooleanConverter}, 
                                             ConverterParameter={x:Static radioButtonBinding:CalcMode.User}}"/>
        </StackPanel>
    </Window>
    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,
    }

UPDATE:

我怀疑这一定是Converter但我不知道为什么?它只是陷入了一个循环。


EDIT将枚举转换为布尔值怎么样?

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试更改 WPF 中绑定的 RadioButton 时出现奇怪的行为 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone

随机推荐

  • 在 Swift 中将 UIButton 覆盖在 UIWebView 上

    所以我有一个加载 UIWebView 的视图 并且我想覆盖 UIButton 用户可以点击以转到另一个视图 我设法将按钮放在网络视图上 但我似乎无法点击它 这是我的代码 class ButtonView UIView var button
  • 如何扩展PS1?

    我有一个 shell 脚本 它在多个目录中运行相同的命令 fgit 对于每个目录 我希望它显示当前的提示符 将在那里运行的命令 如何获取对应的字符串decoded 扩展 PS1 例如我的默认PS1是 debian chroot debian
  • 无法在 Windows 64 位上安装 perl 模块 Net::SSH::Perl

    我已经在 Windows 2008 服务器 64 位 上安装了 active perl 我尝试使用命令 cpan install Net SSH Perl 安装 Net SSH Perl 问了几个问题后 它开始安装 但失败 指出 make
  • SwiftUI List 如何识别 macOS 上选择的项目

    这是我基于的这个答案 该代码当前允许用户选择一个单元格 但我无法区分which单元格被选择或执行任何代码来响应选择 总之 如何根据所选单元格的名称执行代码并在单击时执行 当前单击的单元格以蓝色突出显示 但我想识别它并根据该选择采取相应的操作
  • 尝试在 Android 中使用 Proguard 和 SQLcipher 时出现 NoClassDefFoundError

    我得到了ava lang NoClassDefFoundError net sqlcipher CursorWindow当尝试使用 sqlicipher 和 proguard 运行我的应用程序时 该项目在没有启用 proguard 的情况下
  • 尝试使用 matplotlib 绘制 OpenCV 的 MSER 区域

    我正在使用 OpenCV 的 MSER 特征检测器来查找文本区域 使用以下 Python 代码 我可以检测文本 和一些非文本 并围绕每个字母绘制多边形曲线 现在 我需要使用 matplotlib 使用不同的颜色来绘制这些文本 更具体地说是每
  • 有符号和无符号字符

    为什么两个char像signed char and unsigned char具有相同的值不相等 char a 0xfb unsigned char b 0xfb bool f f a b cout lt lt f 在上面的代码中 值f i
  • 带有重音符号的 ASP MVC3 FileResult + IE8 - 有问题吗?

    如果文件名包含重音符号 则它在 Opera FF Chrome 和 IE9 中按预期工作 但在 IE8 中文件类型是 未知文件类型 并且显示 文件 作为文件名 实际上是 URL 的最后部分 有人知道解决方法吗 除了替换文件名中的 特殊 字符
  • 如何处理 FQL 返回的 big int facebook uid?

    我在处理 facebook 的大用户 ID 并将它们正确存储到我的数据库中时遇到问题 由于 fql query REST api 将被弃用 我将使用 GRAPH API 来获取 FQL 的结果 我想获取我的朋友名单 包括性别 恋爱状况 我执
  • 为什么 Gson 会漂亮地打印到控制台,而不是文件?

    我有一个类 我们称之为 Cls 其中包含一些值 当我使用声明的 Gson 实例时GsonBuilder setPrettyPrinting create 并使用它来序列化 Cls 对象并将生成的 JSON 字符串打印到控制台 我得到了很好的
  • ClearCase:我可以在动态视图中劫持文件吗?

    我正在 Unix 平台的动态视图中工作 我需要暂时劫持一个文件 稍后再取消劫持 但命令chmod w filename不管用 我收到消息chmod WARNING can t change filename 我可以从 Windows 中的快
  • 如何将“SelectMany”与 DataServiceQuery<> 一起使用

    我针对 ADO 数据服务运行以下 DataServiceQuery 安装了更新以使其像 net 4 一样运行 DataServiceQuery
  • php 单引号和双引号

    remove line breaks function safeEmail string return preg replace n r t 0A 0D 08 09 i string example usage 1 from HTML Em
  • Woocommerce 3.3+ 中的后端订单列出自定义操作按钮

    自 WooCommerce 版本 3 3 起 下面在管理订单列表中显示自定义操作按钮的代码不再起作用 Add your custom order action button add action woocommerce admin orde
  • Python - Flask:根目录外的静态文件夹

    只是为了好玩 我试图了解如何创建一个网站Python and Flask 该网站必须在我自己的计算机上运行 我将是唯一的客户 到目前为止 我已经完成了大部分我想做的事情 但现在我遇到了一个无法解决的技术问题 在客户端我想显示服务器返回的图像
  • 使用 ServiceStack 访问 SOAP Web 服务

    我正在创建与 ServiceStack 相互通信的客户端 服务器应用程序 并且运行良好 但我还需要访问外部 SOAP Web 服务 我尝试使用Soap12ServiceClient访问它 但我找不到任何示例 然后我采用了实际有效的添加服务引
  • Nodejs - Express res.download 给出发送异常后无法设置标头

    我想制作一个可以为任何扩展名的文件提供服务的 api 像这样 http localhost download 文件 扩展名 这是我的代码 但它间歇性地给出此消息 发送后无法设置标头 var express require express v
  • Python:如何从导入的模块调用全局函数

    Python 3 中可以从导入函数调用全局函数吗 folders folder1 def py def do test print def do test global function 1 print def do test main p
  • 将 Rust 中的浮点值限制为最小/最大范围

    给定一些任意的浮点值 将该值限制在最小 最大范围的惯用方法是什么 IE 如果您提供的值低于最小值 则返回最小范围值 如果您提供的值大于最大值 则返回最大范围值 否则返回原始浮点值 我认为这种方法可行 但它没有给我正确的值 fn main d
  • 尝试更改 WPF 中绑定的 RadioButton 时出现奇怪的行为

    我在我的中绑定了两个单选按钮Child窗口到Enum in my ViewModel它是在主窗口中构建的 绑定按预期工作 但我注意到一个非常奇怪的行为 我无法解决 我在这里提供了所有代码 以便您可以轻松地自己重构问题 以下是查看这种奇怪行为