c# - Winforms 将枚举绑定(bind)到单选按钮

标签 c# winforms data-binding enums radio-button

如果我有三个单选按钮,将它们绑定(bind)到具有相同选项的枚举的最佳方法是什么?例如

[] Choice 1
[] Choice 2
[] Choice 3

public enum MyChoices
{
    Choice1,
    Choice2,
    Choice3
}

最佳答案

我知道这是一个老问题,但它是第一个出现在我的搜索结果中的问题。我找到了一种将单选按钮绑定(bind)到枚举,甚至是字符串或数字等的通用方法。

    private void AddRadioCheckedBinding<T>(RadioButton radio, object dataSource, string dataMember, T trueValue)
    {
        var binding = new Binding(nameof(RadioButton.Checked), dataSource, dataMember, true, DataSourceUpdateMode.OnPropertyChanged);
        binding.Parse += (s, a) => { if ((bool)a.Value) a.Value = trueValue; };
        binding.Format += (s, a) => a.Value = ((T)a.Value).Equals(trueValue);
        radio.DataBindings.Add(binding);
    }

然后在表单的构造函数或表单加载事件中,在每个 RadioButton 控件上调用它。 dataSource 是包含您的枚举属性的对象。我确保 dataSource 实现了 INotifyPropertyChanged 接口(interface),在枚举属性 setter 中触发了 OnPropertyChanged 事件。

AddRadioCheckedBinding(Choice1RadioButton, dataSource, "MyChoice", MyChoices.Choice1);
AddRadioCheckedBinding(Choice2RadioButton, dataSource, "MyChoice", MyChoices.Choice2);

关于c# - Winforms 将枚举绑定(bind)到单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2476829/

相关文章:

c# - 我可以将 .net 3.5 二进制文件用于带有 .net 4.0 应用程序的库吗/如果有的话,有什么负面影响?

c# - 使用 .NET 4 任务库在 WPF 中显示阻塞消息框

c# - 从组合枚举值中获取所有枚举常量的更好方法

c# - 如何以编程方式显示 MainMenu 的子菜单?

c# - 我有时会在 System.Threading.Tasks.TaskCompletionSource<bool> 上遇到异常,我该如何解决?

javascript - Angular 范围不具有约束力

c# - 使单个对象可枚举的最便宜的方法?

winforms - TreeView 在 Ctrl+Click 上重新获取焦点

wpf - 如何跳过对禁用元素的验证?

c# - 将枚举绑定(bind)到自定义控件上的组合框