45

GalaSoftMVVMLightフレームワークを使用してrelayコマンドにパラメーターを渡す際に問題が発生しました。mvvm lightのrelaycommandの実装はラムダパラメーターを使用しないことを知っているので、私はいくつかの調査を行い、人々が次のようなことを行うことでそれを回避する方法を見つけました:

public RelayCommand ProjMenuItem_Edit
{
    get
    {
        if (_projmenuItem_Edit == null)
        {
            //This should work....
            _projmenuItem_Edit = new RelayCommand(ProjEditNode);
        }
        return _projmenuItem_Edit;
    }
}

private void ProjEditNode(object newText)
{
    var str = newText as string;
    OrganLocationViewModel sel = 
        ProjectOrganLocationView.GetExtendedTreeView().GetTopNode();

    //Console.WriteLine(sel.OrganDisplayName);
    sel.OrganDisplayName = str;
}

ただし、次のような行_projmenuItem_Edit = new RelayCommand(ProjEditNode);でエラーが発生し続けますArgument 1: cannot convert from 'method group' to 'System.Action'

私は何が欠けていますか?

4

3 に答える 3

90

私はこれがうまくいくと信じています:

_projmenuItem_Edit = new RelayCommand<object>((txt)=>ProjEditNode(txt));

- 編集 -

次のタイプでもRelayCommandを定義する必要があります。

例えば

public RelayCommand<string> myCommand { get; private set; }
myCommand = new RelayCommand<string>((s) => Test(s));

private void Test(string s)
{
    throw new NotImplementedException();
}
于 2011-03-14T13:14:26.740 に答える
4

RelayCommand()空ではないコンストラクターはないと思います。間違った種類のメソッドを渡そうとしています。

RelayCommandでコマンドパラメーターをサポートする場合はRelayCommand<T>、Tを任意のタイプのパラメーターにすることができる場所を使用する必要があります。あなたの状況ではRelayCommand<String>、void(string)シグニチャを持つメソッドを受け入れるでしょう。(したがって、強く型付けされ、醜いオブジェクトを使用しません)

于 2011-03-14T13:14:50.640 に答える
2

リレーコマンドを宣言する別の方法は、コードを減らすのに役立ちます

public RelayCommand ChartCommand
{
    set
    {
        RelayCommand<string> chartCommand = 
            new RelayCommand<string>(e => ExecuteChartCommand(e));               
    }
}

public void ExecuteChartCommand(string vendor)
{

}
于 2012-11-12T11:26:43.253 に答える