0

これは、ここで話す私の全体的な.NETの経験不足だと思いますが、なぜこれが私に起こっているのか理解できません。

私のモデルImportManyはISystemSetupEditorと呼ばれるインターフェースであり、この場合、Exportそのインターフェースとなるいくつかの部分があります。

アプリケーションのViewModelには、メニューを作成し、を繰り返してIEnumerable<ISystemSetupEditor>メニュー項目を設定するメソッドがあります。次のようになります。

private ObservableCollection<WPFMenuItem> CreateSystemSetupItems()
{
    ObservableCollection<WPFMenuItem> menu = new ObservableCollection<WPFMenuItem>();

    foreach(ISystemSetupEditor editor in _model.SystemSetupEditors) {
        WPFMenuItem menuitem = new WPFMenuItem( editor.GetName());
        menuitem.Command = new RelayCommand( () => editor.ShowTool());
        menu.Add( menuitem);
    }

    return menu;
}

問題は、メニュー項目をクリックする、最後に列挙されたISystemSetupEditorから派生したオブジェクトのShowTool()が常に呼び出されることです。これは、同じ参照が各RelayCommandによって格納されているかのようです。

私は誰かができることを望んでいました:

  • なぜこれが起こっているのかを説明するか、少なくともキーワードを教えてください。そうすれば、自分で調べて理解することができます。
  • 考えられる解決策を提示します。これまでに思いついたのは、別の辞書を管理することだけです。ここで、T、Uは正しいライブラリに解決できるため、後で適切な関数を呼び出すことができます。
4

1 に答える 1

1

これが基本的に、c#でクロージャとループがどのように機能するかです。

ここで良い説明を見てください

于 2010-06-24T18:28:53.917 に答える