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

时间:2011-07-27 15:26:00

标签: c# events button event-handling icommand

我正在尝试从Button中触发一个事件,该事件将被捕获在另一个类中,而不会将此类作为我的类中的实例。我能这样做吗?

让我说我的按钮是在PictoPanelViewModel中创建的,而且这个类没有对MainViewModel的任何引用,我希望myButton触发一个事件来调用MainViewModel中的方法。

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

我现在有点困惑。

修改 按钮是在PictoPanelViewModel

中动态创建的

1 个答案:

答案 0 :(得分:1)

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

  1. 将事件myButtonClickedEvn添加到PictoPanelViewModel
  2. 创建一个方法TriggerMyButtonClickedEvn,它只是在PictoPanelViewModel中触发事件
  3. 将TriggerMyButtonClickedEvn关联到myButton.Click
  4. 在MainViewModel中,当您的类看到PictoPanelViewModel时,请将您的方法与新创建的事件相关联。
  5. 所有这些都在这样的代码中翻译。

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