C# 如何将枚举值数据绑定为布尔值?
因此,我有一个带有3个控件的主窗体,我希望使用枚举来控制这些控件的C# 如何将枚举值数据绑定为布尔值?,c#,.net,winforms,data-binding,C#,.net,Winforms,Data Binding,因此,我有一个带有3个控件的主窗体,我希望使用枚举来控制这些控件的Enable属性 所有这些控件都引用了包含枚举值级别的数据 enum Level { Red, Yellow, Green } 因此,如果它是红色,我希望红色控件启用,如果它是黄色,则黄色控件启用,以此类推 如何以最少的代码和优雅的风格最好地做到这一点 我尝试在数据上设置3个属性,如IsRed、IsYellow等,以将它们连接起来。但是我不知道如何从这些属性中检测级别的更改。RedControl.Enab
Enable
属性
所有这些控件都引用了包含枚举
值级别的数据
enum Level
{
Red,
Yellow,
Green
}
因此,如果它是红色
,我希望红色控件
启用,如果它是黄色
,则黄色控件
启用,以此类推
如何以最少的代码和优雅的风格最好地做到这一点
我尝试在
数据
上设置3个属性,如IsRed
、IsYellow
等,以将它们连接起来。但是我不知道如何从这些属性中检测级别的更改。RedControl.Enabled=((value&Level.Red)!=0)
我不确定是否要将其数据绑定。。。但是,在属性集中放置启用代码怎么样
即
这样,您的属性就可以正常工作(我想您可以对其进行数据绑定,但我不太确定),当它发生更改时,控制器将发生更改。您的绑定源类可以实现System.ComponentModel.INotifyPropertyChanged
。我认为在windows窗体中进行数据绑定是一种灵活的方法
这里有一篇文章介绍如何做到这一点。不过,我还没有对它进行深入的分析
[Flags]
enum Level:int
{
Red = 1,
Green = 2,
Blue = 4,
Yellow = Red | Green,
White = Red | Green | Blue
}
public class myControl : WebControl
{
public Level color;
...
}
public static class extension
{
public static bool Compare(this Level source, Level comparer)
{
return (source & comparer) > 0; // will check RGB base color
//return (source & comparer) == source; // will check for exact color
}
}
用法
这不适用于数据绑定,也不会编译[(value&Level.Red)将返回int,而不是bool]谢谢,但所有这些控件实例都包含对数据的引用,并且数据中的任何更改都应该适当地提醒所有控件。那么,当数据更改时引发事件怎么样,然后在每个控件的eventhandler中,让控件禁用自己(如果不是他喜欢的数据),并启用自己(它需要的数据)。
[Flags]
enum Level:int
{
Red = 1,
Green = 2,
Blue = 4,
Yellow = Red | Green,
White = Red | Green | Blue
}
public class myControl : WebControl
{
public Level color;
...
}
public static class extension
{
public static bool Compare(this Level source, Level comparer)
{
return (source & comparer) > 0; // will check RGB base color
//return (source & comparer) == source; // will check for exact color
}
}
var color = Level.Red;
bool result = color.Compare(Level.Green);
myControl test = new myControl();
test.Enabled = test.Color.Compare(Level.Red);