Erstens war der Code, den Sie geschrieben haben, Unsinn, Sie haben versucht, einen Parameter während eines Funktionsaufrufs zu deklarieren. Sie haben dann versucht, das Ergebnis dieses Aufrufs (der void
hätte lauten sollen) an einen Konstruktor zu übergeben, der einen Action<object>
oder möglicherweise einen Action
Delegaten erwartet. Das kannst du einfach nicht tun.
Zweitens Die ICommand
Schnittstellen Execute
Methode (was wirklich ist, was Sie implementieren) sieht wie folgt aus:
void Execute(object parameter)
Wo Parameter über die CommandParameter
Eigenschaft auf dem anrufenden Objekt übergeben wird (dh ein Button
). Das Objekt DelegateCommand
implementiert dies und ruft den Delegierten, der den Konstruktor übergeben hat, mit den gleichen Argumenten auf (einige Versionen dieser Klasse erlauben es Ihnen, einen einfachen Action
zu übergeben und DelegateCommand
ignoriert für Sie).
es zu beheben, entweder passieren ProgramID
auf CommandParameter
und dies tun:
private void PopulateModelRequest(object parameter)
{
int programId = (int)parameter;
}
oder so etwas wie
new DelegateCommand(() => PopulateModelRequest(ProgramId));
private void PopulateModelRequest(int programId)
{
}
Die zweite ist eine Schließung über ProgramId zu schaffen, so dass, wenn Sie Zugriff haben würde dieses Feld anyways in Ihrer Methode, verwenden Sie es einfach, anstatt es in.
Ich glaube nicht, dass Sie cal l Ein Befehlsobjekt wie eine Funktion ... Ich stimme dem zu, dass das OP die Delegierten besser verstehen muss, bevor es weitergeht. – BradleyDotNET
@BradleyDotNET obwohl die paranteses einen Aufruf einer Methode in C# und in vielen anderen Programmiersprachen markieren, also auch wenn es nicht möglich ist, habe ich festgestellt, dass er versucht, durch Hinzufügen von Paranthes dem Compiler mitzuteilen, dass er eine Methode aufrufen möchte – meJustAndrew
Ich stimme all dem zu, ich beziehe mich auf Ihre letzte Codezeile ('ModelRequestCommand (ProgramId)') 'DelegateCommand' ist ein sehr spezifisches Objekt in WPF, das eine generische Implementierung von' ICommand' – BradleyDotNET