【问题标题】:Handling events from shared control in MVC在 MVC 中处理来自共享控件的事件
【发布时间】:2009-01-19 17:06:55
【问题描述】:

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

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

【问题讨论】:

    标签: c# model-view-controller events


    【解决方案1】:

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

    【讨论】:

    • 或者所有控制器都需要接收事件以及活动的事件? IE。都收到,但只有一个响应?
    • 一次只有一个控制器处于活动状态。我喜欢经理的想法。我正在研究如何实现它...
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      当然,当这个简单的要求变得复杂时,一个负责跟踪可见性和订阅的经理肯定会提供更好的结构。但现在这有点过头了:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-08
        • 2018-10-15
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多