Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将枚举值数据绑定为布尔值?_C#_.net_Winforms_Data Binding - Fatal编程技术网

C# 如何将枚举值数据绑定为布尔值?

C# 如何将枚举值数据绑定为布尔值?,c#,.net,winforms,data-binding,C#,.net,Winforms,Data Binding,因此,我有一个带有3个控件的主窗体,我希望使用枚举来控制这些控件的Enable属性 所有这些控件都引用了包含枚举值级别的数据 enum Level { Red, Yellow, Green } 因此,如果它是红色,我希望红色控件启用,如果它是黄色,则黄色控件启用,以此类推 如何以最少的代码和优雅的风格最好地做到这一点 我尝试在数据上设置3个属性,如IsRed、IsYellow等,以将它们连接起来。但是我不知道如何从这些属性中检测级别的更改。RedControl.Enab

因此,我有一个带有3个控件的主窗体,我希望使用枚举来控制这些控件的
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);