2016-11-21 11 views
2

私はこれ以外の方法でラムダを使用することに慣れています。 DelegateCommandを試して定義しようとすると、コマンドの囲みタイプの非静的メンバーにアクセスする必要があります。例:上記のコードでなぜDelegateCommandのExecuteデリゲートのインスタンスプロパティにアクセスできないのですか?

public ICommand ShowViewCommand { get; set; } = new DelegateCommand<string>(v => 
    { 
     var viewModel = new EditFormViewModel; 
     var ucType = Assembly.GetExecutingAssembly().GetType(v); 
     App.SetWindowView(viewModel, ucType); 
    }, 
v => true); 

は、App.SetWindowView呼び出しで、Appは波線下線赤を持っており、その上にホバリングに、私は聞いています:

は非静的プロパティAppにアクセスできません。静的コンテキスト。

これは私が閉鎖にラムダを使用するときに慣れていた動作ではありません。ここでは何が違うのですか?

答えて

7

自動実装されたプロパティ初期化プログラム内のインスタンスメンバーにアクセスしようとしています。これはフィールドイニシャライザでそうしようとするようなものです。基本的には、暗黙のうちにイニシャライザでも、ラムダ式でさえもthisを参照することはできません。代わりに、コンストラクタでこれを行う必要があります:

+0

Aaah、ありがとう、ジョン。私はC#6が自動プロパティ初期化子を可能にするという事実を忘れてしまった。今私はWPFで数年前に作ったのを覚えています。私はコンストラクタでコマンドをビルドしましたが、私はあなたがイニシャライザでそれを行うことができないことに気づいたことはありません。あなたがそれを必要としているとは限りませんが、私はあなたにこれに恩恵を与えてくれることを望みました。この問題は一週間の驚異の源です。 – ProfK

関連する問題