2016-08-18 3 views
1
ModelRequestCommand = new DelegateCommand(PopulateModelRequest); 

hat keinen Fehler und ist in Ordnung, aber ich mag einen Parameter zu übergeben (int ProgramID) in bevöl Modell Anfrage. ProgramID ist definiert durchDelegat Befehl mit Funktion mit dem Parameter

this.ProgramId = ProgramID; 

Es gibt einen Fehler, wenn ich

ModelRequestCommand = new DelegateCommand(PopulateModelRequest(int ProgramID); 

versuchen wie kann ich über diese gehen?

eine Schaltfläche, um ModelRequestCommand in WPF verbindlich

Antwort

3

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.

1

Dieser Fehler ist, denn wenn man parantesis ein Verfahren wie dieses

PopulateModelRequest(int ProgramID) 

fügen Sie einfach den Compiler sagen, dass Sie die PopulateModelRequest Methode aufrufen wollen. Es ist sogar nicht möglich, die Methode aufzurufen, da Sie auch den Typ des Parameters angeben, bei dem nur der Parameter erwartet wird. Daher ist das, was Sie versuchen, grundsätzlich falsch.

Wenn Sie einen Delegaten ModelRequestCommand zuweisen möchten, dann sollten Sie wie in der ersten Zeile des Codes tun:

ModelRequestCommand = new DelegateCommand(PopulateModelRequest); 

ich Ihre Frage falsch verstanden haben, aber auf jeden Fall ist es besser, für Sie ein nehmen schau dir eine article ablout delegates and events an, bevor du weitermachst.

+1

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

+0

@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

+0

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

Verwandte Themen