0

このクラスをクラスのインスタンスとして持たずに、別のクラスでキャッチされるButtonからイベントをトリガーしようとしています。それをしてもいいですか?

ButtonsがPictoPanelViewModelで作成されており、このクラスにMainViewModelへの参照がない場合、myButtonがMainViewModel内のメソッドを呼び出すイベントをトリガーするようにします。

myButton.CommandとmyButton.Clickを試しましたが、これら2つを呼び出すには、MainViewModelの参照が必要です。

私は今少し混乱しています。

編集 ボタンはPictoPanelViewModelで動的に作成されます

4

1 に答える 1

1

SIは、MainViewModelが少なくとも一瞬PictoPanelViewModelへの参照を持っていること、そして最悪の場合、その時点でボタンがまだ作成されていないことを前提としています。これが事実であるならば、私はそうするでしょう:

  1. イベントmyButtonClickedEvnをPictoPanelViewModelに追加します
  2. PictoPanelViewModelでイベントをトリガーするだけのメソッドTriggerMyButtonClickedEvnを作成します
  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-07-28T06:16:49.270 に答える