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

时间:2010-01-08 19:10:21

标签: c# .net winforms data-binding

所以我有一个包含3个控件的主窗体,我希望使用枚举来控制Enable属性。

所有这些控件都引用了包含Data值级别的Enum

enum Level
{
    Red,
    Yellow,
    Green
}

因此,如果它是Red,我希望RedControl启用,如果它是yellow,则启用YellowControl等等。

如何以最少的代码和优雅来做到最好?

我尝试在IsRed上添加3个属性,例如IsYellowData等,以便将它们连接起来。但后来我不知道如何从这些属性中检测Level的变化。

4 个答案:

答案 0 :(得分:1)

[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);

答案 1 :(得分:0)

RedControl.Enabled = ((value & Level.Red) != 0)

答案 2 :(得分:0)

我不确定数据绑定...但是如何将启用代码放在属性集中呢?

public YourClass
{
   Level _level;
   public Level level 
   {
      get{ return _level;}
      set 
      {
        _level = value;
        if(_level == Level.Green) { greenControl.Enable = true; //plus disable others }
        if(_level == Level.Yellow) { yellowControl.Enable = true; //plus disable others }
        if(_level == Level.Red) { redControl.Enable = true; //plus disable others }
      }
   }
}

这样你的财产就像正常一样工作(我想你可以对它进行数据绑定但我不确定)并且当它被改变时,控制器将会改变。

答案 3 :(得分:0)

您的绑定源类可以实现System.ComponentModel.INotifyPropertyChanged。我认为这是一种在Windows窗体中进行数据绑定的灵活方式。

这是关于codeproject的一篇文章,展示了如何做到这一点。不过,我还没有深入分析过它。