【问题标题】:Handle C# listener处理 C# 监听器
【发布时间】:2016-03-21 14:17:36
【问题描述】:

我正在尝试使用界面处理对话框按钮。我在 android - java 中得到了这个解决方案:

1) 声明一个接口:

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

2)实现对话框:

  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) 调用函数显示对话框:

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

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

现在我不想在 C# 中迁移这个函数:

1) 声明相同的接口;

2)实现对话框创建:

          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) 问题来了,如何调用这个方法并覆盖接口方法?

【问题讨论】:

    标签: c# event-handling win-universal-app actionlistener observer-pattern


    【解决方案1】:

    在 C# 中有点不同,因为它不像 Java 那样支持内联类。一种解决方案是定义一个实现您的接口的类,并在调用您的方法时将该类用作参数。所以你会有:

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

    然后你调用你的方法:

         createDialog(new MyImplementor());
    

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      相关资源
      最近更新 更多