Как связать значение Enum с логическим значением? - PullRequest
0 голосов
/ 08 января 2010

Итак, у меня есть основная форма с 3 элементами управления, свойство Enable которой я хочу контролировать с помощью enum.

Все эти элементы управления имеют ссылку на Data, который содержит значение уровня Enum.

enum Level
{
    Red,
    Yellow,
    Green
}

Так что, если это Red, я хочу, чтобы RedControl стал активным, если это yellow, тогда YellowControl станет активным и т. Д.

Как мне лучше всего это сделать с минимальным кодом и элегантностью?

Я попытался иметь 3 свойства, таких как IsRed, IsYellow и т. Д. На Data, чтобы соединить их. Но тогда я не знал, как определить изменение Level по этим свойствам.

Ответы [ 4 ]

1 голос
/ 11 декабря 2010
[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);
0 голосов
/ 08 января 2010

Я не уверен насчет привязки данных ... но как насчет помещения разрешающего кода в набор свойств?

т.е.

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 }
      }
   }
}

таким образом, что ваше свойство работает как обычно (иЯ думаю, вы можете связать данные, но я не совсем уверен), и когда он будет изменен, контроллеры будут меняться.

0 голосов
/ 08 января 2010

Ваш исходный класс привязки может реализовать System.ComponentModel.INotifyPropertyChanged. Я думаю, что это гибкий способ привязки данных в окнах форм.

Вот одна статья о codeproject , показывающая, как это сделать. Хотя я не очень глубоко проанализировал это.

0 голосов
/ 08 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...