C# 使用带有绑定的子类的最佳策略

C# 使用带有绑定的子类的最佳策略,c#,wpf,C#,Wpf,我相信这是一个软件架构问题 我有一个类(Controller)和一些从Controller继承的子类(ControllerA、ControllerB、ControllerC) 控制器具有所有的功能,允许我连接到控制器,抓取数据,抓取状态更新等。。。子类之间唯一的区别是它们收集的一些数据在不同的控制器之间是不同的 以下是我认为我面临的几个问题: 从各种子控制器(如ConnectionStatus)获取类似的状态 在XAML中绑定控制器 以下是这些问题的一些例子: 1)在名为列表[Controlle

我相信这是一个软件架构问题

我有一个类(Controller)和一些从Controller继承的子类(ControllerA、ControllerB、ControllerC)

控制器具有所有的功能,允许我连接到控制器,抓取数据,抓取状态更新等。。。子类之间唯一的区别是它们收集的一些数据在不同的控制器之间是不同的

以下是我认为我面临的几个问题:

  • 从各种子控制器(如ConnectionStatus)获取类似的状态
  • 在XAML中绑定控制器
  • 以下是这些问题的一些例子:

    1)在名为列表[Controller]类型的控制器的列表中包含子控制器便于检查控制器的状态,因为我可以在列表中循环并轻松检查状态或数据

    例如:

    foreach (Controller controller in Controllers) {
        Console.WriteLine(controller.ConnectionStatus);
    }
    
    2)但如果某个控制器的数据都在一个列表中,我不确定如何绑定到该控制器的数据

    例如,假设ControllerA对象是控制器列表中的第一个对象:

    <TextBlock Text="{Binding Path=Controllers[0].ControllerAData}" />
    
    
    
    这不起作用,因为ControllerAData不出现在Controller类中

    我可以为每个子控制器类型(ControllerA、ControllerB、ControllerC)创建单独的列表,但这样就很难循环每个控制器并获取它们的状态和数据,如示例1所示

    解决这些问题的好方法是什么


    谢谢大家!

    您可以将控制器保留在列表中,但仍然绑定到单个控制器

    var controllerA = new ControllerA();
    controllerList.Add(controllerA);
    
    windowA.DataContext = controllerA;
    
    在该窗口中,您将拥有相对于该特定控制器的绑定路径。该列表对于绑定仍然不可见


    顺便说一句:如果您要绑定到控制器,它们不应该命名为视图模型吗?

    “这不起作用,因为ControllerData不出现在控制器类中”是不正确的。如果
    Controllers[0]
    ControllerA
    ,则绑定将正常工作,因为它使用反射来访问实际的对象类型,并绑定到其
    ControllerAData
    属性。@Clemens-我希望这是真的,但我看到的是:System.Windows.Data错误:40:BindingExpression路径错误:“在“对象”“控制器”
    控制器[0]上未找到ControllerAData”属性
    显然不是一个
    ControllerA
    实例,而是一个
    Controller
    这就是我将它添加到列表中的方式:ControllerA ControllerA=new ControllerA();控制器。添加(controllerA);它添加的很好,但是绑定表示它无法读取公共属性。您确定
    ControllerAData
    是ControllerA类的公共属性吗?