3

私は次のものを持っています:

public MainViewModel(IDataService dataService)
{
    _dataService = dataService;

    NotWorkingCommand = new RelayCommand(() => 
    dataService.GetData((item, error) =>
    {
        if (error != null)
        {
            // Report error here
            return;
        }
        WelcomeTitle = item.Title;
    }));
}

RelayCommandしばらくすると発砲が止まる理由を誰か説明してもらえますか? の使用に関係しているのではないかと思いますが、WeakReference使用したRelayCommand経験はありませんWeakReference_dataService.GetData代わりに使用した場合、それは機能します。

4

2 に答える 2

2

ラムダ式では、変数dataServiceのスコープがコンストラクターにのみ制限されているため、dataService.GetData命令は機能しません。

代わりに、この参照をバッキングフィールドにコピーして、代わりにこのインスタンスを呼び出す必要があります。_dataService.GetDataを使用して機能すると言ったときに、解決策の近くにいたと思われる場合。

private readonly IDataService _dataService;

public RelayCommand NotWorkingCommand { get; private set; }


public MainViewModel(IDataService dataService)
{
        _dataService = dataService;

        NotWorkingCommand = new RelayCommand(() =>
        _dataService.GetData((item, error) =>
        {
            if (error != null)
            {
                // Report error here
                return;
            }
            WelcomeTitle = item.Title;
        }));
    }

(ctorのスコープ内で)relayコマンドの作成時に参照が存在するため、デリゲートは正しく作成されているようですが、正しく評価できないため、実行時に呼び出すことはできません。

于 2012-11-14T09:39:46.350 に答える