按钮触发将被另一个类捕获的事件或命令

发布于 2024-11-26 12:32:23 字数 342 浏览 1 评论 0原文

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

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

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

我现在有点困惑。

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

I am trying to trigger an event from a Button that will be caught in a different class without having this class as an instance in my class. Can I do that?

Lets say my Buttons are getting created in PictoPanelViewModel and this class doesnt have any reference to the MainViewModel, I want myButton to trigger an event that will call a method inside MainViewModel.

I tried myButton.Command and myButton.Click but these two need a reference of MainViewModel so I can call it.

I'm a little bit confused now.

EDIT
The Buttons are created dynamically in PictoPanelViewModel

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘羡 2024-12-03 12:32:23

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);

SI assume that MainViewModel has a reference to PictoPanelViewModel at least for an instant, and, to be in the worst case, that the buttons have not been created yet at that time. If this is the case I would:

  1. Add an event myButtonClickedEvn to PictoPanelViewModel
  2. Create a method TriggerMyButtonClickedEvn which simply triggers the event in PictoPanelViewModel
  3. Associate TriggerMyButtonClickedEvn to myButton.Click
  4. In MainViewModel, at the time your class sees PictoPanelViewModel, associate your method to the newly created event.

All this translates in code like this.

In 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);
    }

In MainViewModel (in a place where you have the instance of PictoPanelViewModel):

        aPictoPanelViewModel.myButtonClickedEvn += new System.EventHandler (myButtonClickedInPictoPanelViewModel);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文