Controladores
La interfaz de usuario de aplicaciones multiplataforma de .NET (.NET MAUI) proporciona una colección de controles multiplataforma que se pueden usar para mostrar datos, iniciar acciones, indicar actividad, mostrar colecciones, elegir datos, etc. Cada control tiene una representación de interfaz que abstrae el control. Los controles multiplataforma que implementan estas interfaces se conocen como vistas virtuales .
Manejadores asignan estas vistas virtuales a los controles de cada plataforma, conocidos como vistas nativas. Los manejadores también son responsables de crear instancias de la vista nativa subyacente y de mapear la API de control multiplataforma a la API de vista nativa. Por ejemplo, en iOS, un controlador de .NET MAUI asigna un Button a un UIButton
de iOS. En Android, el Button se asigna a un MaterialButton
:
Se accede a los controladores de MAUI de .NET mediante la interfaz específica del control, como IButton
para un(a) Button. Esto evita que el control multiplataforma tenga que hacer referencia a su controlador y que el controlador tenga que hacer referencia al control multiplataforma.
Cada clase de controlador expone la vista nativa del control multiplataforma mediante su propiedad PlatformView
. Se puede tener acceso a esta propiedad para establecer propiedades de vista nativas, invocar métodos de vista nativos y suscribirse a eventos de vista nativos. Además, el control multiplataforma implementado por el controlador se expone a través de su propiedad VirtualView
.
Al crear un control multiplataforma cuya implementación se proporciona en cada plataforma mediante vistas nativas, debe implementar un controlador que asigne la API de control multiplataforma a las API de vista nativa. Para obtener más información, consulte Creación de controles personalizados con controladores.
También puede personalizar controladores para aumentar la apariencia y el comportamiento de los controles multiplataforma existentes más allá de la personalización posible a través de la API del control. Esta personalización del controlador modifica las vistas nativas para el control multiplataforma. Los controladores son globales y la personalización de un controlador para un control dará como resultado que todos los controles del mismo tipo se personalicen en la aplicación. Para obtener más información, consulte Personalización de controles MAUI de .NET con manejadores.
Mapeadores
Un concepto clave de los controladores MAUI de .NET es los mapeadores. Cada controlador normalmente proporciona un asignador de propiedades y, a veces, un asignador de comandos , que asigna la API del control multiplataforma a la API de la vista nativa.
Un asignador de propiedades define qué acciones realizar cuando se produce un cambio de propiedad en el control multiplataforma. Es un Dictionary
que asigna las propiedades del control multiplataforma a sus acciones asociadas. A continuación, cada controlador de plataforma proporciona implementaciones de acciones, que manipulan la API de vista nativa. Esto garantiza que, cuando se establece una propiedad en un control multiplataforma, la vista nativa subyacente se actualiza según sea necesario.
Un asignador de comandos define qué acciones se deben realizar cuando el control multiplataforma envía comandos a vistas nativas. Son similares a los mapeadores de propiedades, pero permiten pasar datos adicionales. Un comando en este contexto no significa una implementación de ICommand. En su lugar, un comando es simplemente una instrucción y, opcionalmente, sus datos, que se envían a una vista nativa. El asignador de comandos es un Dictionary
que asocia el comando del control multiplataforma a sus Acciones asociadas. Cada controlador proporciona implementaciones de las Acciones, que manipulan la API de vista nativa. Esto garantiza que cuando un control multiplataforma envía un comando a su vista nativa, la vista nativa se actualiza según sea necesario. Por ejemplo, cuando se desplaza un ScrollView, el ScrollViewHandler
usa un asignador de comandos para invocar una Acción que acepta un argumento de posición de desplazamiento. A continuación, la acción indica a la vista nativa subyacente que se desplácese hasta esa posición.
La ventaja de usar asignadores para actualizar las vistas nativas es que las vistas nativas se pueden desacoplar de controles multiplataforma. Esto elimina la necesidad de que las vistas nativas se suscriban y cancelen la suscripción a los eventos de control multiplataforma. También permite una personalización sencilla porque los mapeadores se pueden modificar sin necesidad de subclases.
Ciclo de vida del manejador
Todos los controles .NET MAUI basados en el controlador admiten dos eventos de ciclo de vida del controlador:
-
HandlerChanging
se genera cuando se va a crear un nuevo controlador para un control multiplataforma y cuando un controlador existente está a punto de quitarse de un control multiplataforma. El objetoHandlerChangingEventArgs
que acompaña a este evento tiene propiedadesNewHandler
yOldHandler
, de tipoIElementHandler
. Cuando la propiedadNewHandler
no esnull
, el evento indica que se va a crear un nuevo controlador para un control multiplataforma. Cuando la propiedadOldHandler
no esnull
, el evento indica que el control nativo existente está a punto de ser eliminado del control multiplataforma y, por lo tanto, se deben desconectar los eventos nativos y realizar otras tareas de limpieza. -
HandlerChanged
se activa después de que se ha creado el manejador para un control multiplataforma. Este evento indica que el control nativo que implementa el control multiplataforma está disponible y todos los valores de propiedad establecidos en el control multiplataforma se han aplicado al control nativo.
Nota
El evento HandlerChanging
se genera antes del evento HandlerChanged
en un control multiplataforma.
Además de estos eventos, cada control multiplataforma también tiene un método OnHandlerChanging
reemplazable que se invoca cuando se genera el evento HandlerChanging
y un método OnHandlerChanged
que se invoca cuando se genera el evento HandlerChanged
.
Controladores de vistas
En la tabla siguiente se enumeran los tipos que implementan vistas en .NET MAUI:
Controladores de página
En la tabla siguiente se enumeran los tipos que implementan páginas en .NET MAUI:
Página | Controlador de Android | Controlador de iOS/Mac Catalyst | Controlador de Windows | Mapeador de propiedades | Asignador de comandos |
---|---|---|---|---|---|
ContentPage | PageHandler | PageHandler | PageHandler | Mapper | CommandMapper |
FlyoutPage | FlyoutViewHandler | PhoneFlyoutPageRenderer | FlyoutViewHandler | Mapper |
CommandMapper |
NavigationPage | NavigationViewHandler | NavigationRenderer | NavigationViewHandler | Mapper |
CommandMapper |
TabbedPage | TabbedViewHandler | TabbedRenderer | TabbedViewHandler | Mapper |
CommandMapper |
Shell | ShellHandler |
ShellRenderer | ShellRenderer | Mapper |
CommandMapper |