代码之家  ›  专栏  ›  技术社区  ›  Sorskoot

在MVC中处理来自共享控件的事件

  •  3
  • Sorskoot  · 技术社区  · 17 年前

    在我正在开发的一个应用程序中,我实现了一个MVC模式,以使用不同的视图来显示UI的各个部分。在整个UI中有一个输入框,用户可以在其中发出命令或查询。这个输入框生成一些基本事件,如“ValidEntry”、“InvalidEntry”和“EmptyEntry”。每个控制器部件都应响应这些事件。我不希望订阅ValidEntry事件的每个控制器都响应,只希望激活的控制器响应。

    我可以在每个eventhandler中添加一个“if”,检查“this.IsActive”是否为true,并在每次切换视图时更新它。或者为所有不同的控制器添加不同的事件。在这个问题上有更好的想法吗?

    3 回复  |  直到 17 年前
        1
  •  1
  •   ng5000    17 年前

    假设一次只有一个控制器处于活动状态,使用SetActiveController方法创建某种控制器管理器类怎么样。管理器将订阅UI事件,并在当前活动的控制器上调用appropate方法。

        2
  •  1
  •   Mark G    17 年前

    我不确定不同的“视图”是否都可见,焦点是否发生变化,或者它们在不活动时是否隐藏,但让您的“一个控制器控制所有视图”跟踪可见性或焦点,并订阅/取消订阅给定的子控制器到事件,这可能是我实现它的方式。对于接口/抽象类,您应该能够一般地完成它。

        3
  •  1
  •   Heartless Angel    17 年前

    对于像ValidEntry这样只需要单个控制器响应的事件,最简单的方法是将其“降级”为委托,并在收到焦点时将其分配给活动控制器的处理程序。

    当然,当这个简单的需求变得复杂时,跟踪可见性和订阅的经理肯定会提供更好的结构。但就目前而言,这是一种矫枉过正的做法:)