2016-11-04 1 views
0

Ich benutze die Kendo UI MVC Grid und ich möchte Boilerplate Code einkapseln, so dass ich nicht den gleichen Code auf jedem Gitter duplizieren muss. Konfigurieren Sie die Befehle auf dem Gitter sieht wie folgt aus:Wie kann ich einen Standardausdruck im {} eines Lambda-Ausdrucks bereitstellen und trotzdem hinzufügen?

columns.Command(command => 
      { 
       command.Custom("Edit").Text("<span class='k-icon k-edit'></span>").Click("editRecord"); 
       command.Custom("Delete").Text("<span class='k-icon k-i-delete'></span>").Click("deleteItem"); 
      }).Width(130); 

Das Bearbeiten und Löschen von Text sind, aber es gibt ein Potenzial für zusätzliche benutzerdefinierte Befehle ist auf dem Gitter abhängig. Der Typ des Lambda für den Befehl lautet Action<GridActionCommandFactory<T>>. Wie kann ich den Textbaustein zu einer Methode oder etwas abstrahieren und trotzdem benutzerdefinierte Befehle eingeben? Psuedo-Codierung es heraus, dass ich kapier etwas würde wie folgt aussehen:

columns.Command(command => 
      { 
       //Custom commands here 
       SomeConfigClass.DefaultGridCommands(command); 
       //Custom commands here 
      }).Width(130); 

oder vielleicht:

columns.Command(command => 
      { 
       //Custom commands here 
       command.DefaultCommands(); 
       //Custom commands here 
      }).Width(130); 

Und das würde die bearbeiten und löschen Befehle. Aber ich habe keine Ahnung, wie man einen Lambda-Ausdruck so verändert, wie kann ich das erreichen?

+0

Was ist der Typ von 'Befehl' Parameter hier' columns.Command (Befehl => '? D. H.' Aktion > ' –

+0

Egal, ich habe es herausgefunden. – SventoryMang

Antwort

0

Nun, ich habe etwas mehr gegraben und es endete nicht so schwer. Nicht sicher, ob es die eleganteste Lösung, aber ich habe es wie folgt aus:

public static Action<GridActionCommandFactory<T>> GetDefaultGridCommands<T>(Action<GridActionCommandFactory<T>> customCommandsBeforeDefault = null, Action<GridActionCommandFactory<T>> customCommandsAfterDefault = null) where T : class 
    { 
     Action<GridActionCommandFactory<T>> defaultCommands = x => 
     { 
      x.Custom("Edit").Text("<span class='k-icon k-edit'></span>").Click("editRecord"); 
      x.Custom("Delete").Text("<span class='k-icon k-i-delete'></span>").Click("deleteItem"); 
     }; 

     List<Action<GridActionCommandFactory<T>>> actions = new List<Action<GridActionCommandFactory<T>>>(); 

     if(customCommandsBeforeDefault != null) 
      actions.Add(customCommandsBeforeDefault); 
     actions.Add(defaultCommands); 
     if(customCommandsAfterDefault != null) 
      actions.Add(customCommandsAfterDefault); 

     Action<GridActionCommandFactory<T>> combinedAction = (Action<GridActionCommandFactory<T>>) Delegate.Combine(actions.ToArray()); 

     return combinedAction; 
    } 

Dann ist es im Netz anrufen:

columns.Command(KendoUiGridConfig.GetDefaultGridCommands<MyViewModel>()).Width(130); 

Die Delegate.Combine Methode war das, was ich suchte.

Verwandte Themen