programing

MVVM Light RelayCommand 파라미터

telebox 2023. 4. 17. 21:40
반응형

MVVM Light RelayCommand 파라미터

GalaSoft MVVM Light 프레임워크를 사용하여 릴레이 명령에 매개 변수를 전달하는 데 문제가 있습니다.mvvm light의 릴레이 명령 구현에는 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);말하자면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)
{

}

언급URL : https://stackoverflow.com/questions/5298910/mvvm-light-relaycommand-parameters

반응형