C# 如何使用UI映射对象

C# 如何使用UI映射对象,c#,user-interface,class-design,C#,User Interface,Class Design,我有下面的类实现不完整,只是给一个想法 public class MySwitch{ Command command = Command.Red; public Command GetNext() { command = GetNext(command); // circular enum values return command; } } public enum Command

我有下面的类实现不完整,只是给一个想法

   public class MySwitch{
        Command command = Command.Red;
        public Command GetNext() {
            command = GetNext(command); // circular enum values
            return command;
        }
    }


public enum Command { Red =0, Blue=1, Green=2}

public class LED {
    public void Glow(Command command){
        this.setColor(ColorForm(command));
        this.Glow();
    }
}

public class Commander {
    public Commander(LED target, MySwitch source){
        this.LED = LED;
        this.MySwitch = MySwitch;
    }

    public void Execute(){
        this.LED.Glow(this.MySwitch.GetNext());
    }
}
我希望这些对象映射到UI项。考虑一下,我已经赢了表单应用程序,其中开关和LED是两个面板,我希望GDI绘制它。p> 问题是什么是将对象与UI元素同步的最佳方式。选项包括:

创建随面板继承的UI元素,并应包含一个 对象的实例

创建UI元素,表示从BO继承的LEDUI,并且应该 包含用于绘制的容器面板,并使用此.Color实现绘制方法 例如LED-这将导致文件协商2*BO

将UI元素和BO分开,让演示者成为桥梁 在他们之间

在BO本身上实现方法,以在winform上呈现单一UI。自从 它不能直接添加到winform,因此请创建一个CustomForm 对象,该对象允许添加此类元素,并且 调用CustomFOrm.Render,它最终调用 所有子元素。表单和控件的呈现方式非常相似

还有别的办法吗

在我看来,第二点是更好的方法。请说明将BO映射到UI的不同方式的优缺点,以及如何同步它们。游戏开发者可能会有更好的理解

编辑


我的错误是,可能有很多LED和开关。每个开关可连接到多个LED。我创建的类也独立于UI。我不希望找到如何找到控件和发光的解决方案,但如果给你这些类并告诉你制作一个winform应用程序,那么最好的实现方法是什么,假设你将最少接触这些类并编写最少的代码,除了遵循UI开发的标准方法之外,我一直被教导在继承之前先进行引用,如果不必访问某个类的受保护成员,最好在类中创建该类型的对象,而不是继承整个类。如果我错了,请纠正我


在这种情况下,选项3对我来说似乎是最好的。

在C中,WinForms每个UI元素都有一个标记成员,您可以在其中放入任何您想要的内容。因此,当用户按下“开关”时,代码可以在控件上迭代,以查找具有与当前选择匹配的标记的控件

例如,假设LED图像的标记字段中有文本“LED=”,那么您可以编写一个函数来设置发光状态:

// example usage: SetGlow ("Red");

void SetGlow (string colour)
{
   SetGlow (Controls, colour);
}

void SetGlow (ControlContainer controls, string colour)
{
  foreach (Control control in controls)
  {
    if (control.Tag is a string) // syntax escapes me
    {
      string tag = (string) control.Tag;
      if (tag.StartsWith ("LED="))
      {
        if (tag == ("LED=" + colour))
        {
          // enable glow
        }
        else
        {
          // disable glow
        }
      }
    }

    SetGlow (control.Controls, colour);
  }
}