0

Ich versuche Dialogfelder mit einer Schnittstelle zu behandeln. Ich habe diese Lösung in Android - Java:Handle C# Listener

1) erklärt eine Schnittstelle:

public interface DialogPopUpListener { 
    void onConfirmButtonClick(); 
    void onCancelButtonClick(); 
    } 

2) Implementiert Dialog:

public static void genericCreatePopUp(final Context context, final SimpleDialogPopUpListener listener) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Title"); 
    builder.setMessage("Message"); 

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      // do nothing to ignore autoclose 
     } 
    }); 


    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
       // do nothing to ignore autoclose 
     } 
    }); 


    final AlertDialog dialog = builder.create(); 
    dialog.show(); 

    //Overriding the handler immediately after show POSITIVE 
    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       listener.onConfirmButtonClick(""); 
       dialog.dismiss(); 

     } 
    }); 

    //Overriding the handler immediately after show NEGATIVE 
    dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      listener.onCancelButtonClick(); 
      dialog.dismiss(); 
     } 
    }); 
} 

3) Anruffunktion Dialog anzuzeigen:

GenericPopUpDialogSimple.genericCreatePopUp(context, new SimpleDialogPopUpListener() { 
        @Override 
        public void onConfirmButtonClick(String editTxtInput) { 
         //handle positive button        
        } 

        @Override 
        public void onCancelButtonClick() { 
         //handle negative buton 
        } 
       }); 

Nun möchte ich diese Funktion in C# migrieren:

1) Deklarierte die gleiche Schnittstelle;

2) Implementiert Dialogerstellung:

  public async void createDialog(SimpleDialogPopUpListener listener) { 
     var dialog = new MessageDialog("Message", "Title"); 

     // Add positive command and set callback 
     dialog.Commands.Add(new UICommand(btnOkTxt, UICommandInvokedHandler => { 
      listener.onConfirmButtonClick(); 
     }) { Id = 0 }); 

     // Add negative command and set callback 
     dialog.Commands.Add(new UICommand(btnCancelTxt, UICommandInvokedHandler => { 
      listener.onCancelButtonClick(); 
     }) { Id = 1 }); 

     // Show the message dialog 
     await dialog.ShowAsync(); 
     } 

3) Hier ist das Problem, wie kann ich diese Methode aufrufen und Interface-Methoden außer Kraft setzen?

Antwort

0

In C# ist ein bisschen anders, weil es Inline-Klassen nicht als Java unterstützt. Eine Lösung besteht darin, eine Klasse zu definieren, die Ihre Schnittstelle implementiert und diese Klasse als Parameter verwendet, wenn Sie Ihre Methode aufrufen. So werden Sie haben:

public class MyImplementor : DialogPopUpListener { 
    public void onConfirmButtonClick() { 
     Debug.WriteLine("T E S T --> ok"); 
     } 

    public void onCancelButtonClick() { 
     Debug.WriteLine("T E S T --> cancel"); 
     } 
    } 

und Sie Ihre Methode aufrufen:

 createDialog(new MyImplementor());