【问题标题】:Button Trigger an Event Or Command that will be caught by another class按钮触发将被另一个类捕获的事件或命令
【发布时间】:2011-10-14 09:17:12
【问题描述】:

我正在尝试从 Button 触发一个事件,该事件将在另一个类中捕获,而无需将该类作为我的类中的实例。我可以这样做吗?

假设我的按钮是在 PictoPanelViewModel 中创建的,并且此类没有对 MainViewModel 的任何引用,我希望 myButton 触发一个事件,该事件将调用 MainViewModel 中的方法。

我尝试了 myButton.Command 和 myButton.Click 但这两个需要 MainViewModel 的引用,所以我可以调用它。

我现在有点困惑。

编辑 按钮是在 PictoPanelViewModel 中动态创建的

【问题讨论】:

  • MainViewModel 是否有对 PictoPanelViewModel 的引用?

标签: c# events button event-handling icommand


【解决方案1】:

SI 假设 MainViewModel 至少在瞬间具有对 PictoPanelViewModel 的引用,并且在最坏的情况下,当时尚未创建按钮。如果是这种情况,我会:

  1. 将事件 myButtonClickedEvn 添加到 PictoPanelViewModel
  2. 创建一个方法 TriggerMyButtonClickedEvn,它只触发 PictoPanelViewModel 中的事件
  3. 将 TriggerMyButtonClickedEvn 关联到 myButton.Click
  4. 在 MainViewModel 中,当您的类看到 PictoPanelViewModel 时,将您的方法与新创建的事件相关联。

所有这些都转化为这样的代码。

在 PictoPanelViewModel 中:

        this.myButton.Click += new System.EventHandler(this.TriggerMyButtonClickedEvn);

    public event EventHandler myButtonClickedEvn;

    private void TriggerMyButtonClickedEvn(object sender, EventArgs e)
    {
        if (myButtonClickedEvn != null)
            myButtonClickedEvn(sender, e);
    }

在 MainViewModel 中(在您拥有 PictoPanelViewModel 实例的地方):

        aPictoPanelViewModel.myButtonClickedEvn += new System.EventHandler (myButtonClickedInPictoPanelViewModel);

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2017-03-23
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多