簡體   English   中英

MVVM Light RelayCommand參數

[英]MVVM Light RelayCommand Parameters

我在使用GalaSoft MVVM Light框架將參數傳遞給relaycommand時遇到問題。 我知道mvvm light的relay命令的實現不使用lambda參數,所以我做了一些研究,並找到了一種方法,人們通過做這樣的事情來解決它:

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);上收到錯誤_projmenuItem_Edit = new RelayCommand(ProjEditNode); Argument 1: cannot convert from 'method group' to 'System.Action'

我錯過了什么?

我相信這會奏效:

_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();
}

我不認為RelayCommand()有一個非空的構造函數。 你試圖將錯誤的方法傳遞給它。

如果希望RelayCommand支持命令參數,則應使用RelayCommand<T> ,其中T可以是任何類型的參數。 在你的情況下,它將是RelayCommand<String> ,它接受一個帶有void(string)簽名的方法。 (因此也將強類型,不會使用丑陋的對象)

聲明中繼命令的另一種方法是幫助減少代碼

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

public void ExecuteChartCommand(string vendor)
{

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM