Controladores
.NET Multi-platform App UI (.NET MAUI) da 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. Los controladores asignan estas vistas virtuales a los controles de cada plataforma, que se conocen como vistas nativas. Los controladores también son responsables de crear instancias de la vista nativa subyacente y asignar la API de control multiplataforma a la API de vista nativa. Por ejemplo, en iOS, un controlador asigna un Button de .NET MAUI a un UIButton
de iOS. En Android, Button se asigna a AppCompatButton
:
Se accede a los controladores .NET MAUI a través de su interfaz específica del control, como IButton
para un 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 para el control multiplataforma a través de su propiedad PlatformView
. Se puede acceder a esta propiedad para establecer propiedades de vista nativas, invocar métodos de vista nativa y suscribirse a eventos de vista nativa. 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, debes implementar un controlador que asigne la API de control multiplataforma a las API de vista nativa. Para obtener más información, consulta Creación de controles personalizados con controladores.
También puedes personalizar los 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, consulta Personalización de controles de .NET MAUI con controladores.
Asignadores
Un concepto clave de los controladores .NET MAUI son los asignadores. 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 se deben realizar cuando se produce un cambio de propiedad en el control multiplataforma. Es un objeto Dictionary
que asigna las propiedades del control multiplataforma a sus acciones asociadas. Después, 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 asignadores 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 asigna el comando del control multiplataforma a sus acciones asociadas. Después, 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 actualice según sea necesario. Por ejemplo, cuando se desplaza un ScrollView, el ScrollViewHandler
usa un asignador de comandos para invocar una acción que acepte un argumento de posición de desplazamiento. Luego, la acción indica a la vista nativa subyacente que se desplace hasta esa posición.
La ventaja de usar asignadores para actualizar las vistas nativas es que las vistas nativas se pueden desacoplar desde los controles multiplataforma. Esto elimina la necesidad de que las vistas nativas se suscriban a eventos de control multiplataforma y cancelen la suscripción a estos. También permite una personalización sencilla porque los asignadores se pueden modificar sin subclases.
Ciclo de vida de los controladores
Todos los controles .NET MAUI basados en 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 las 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 se va a quitar el control nativo existente del control multiplataforma y, por lo tanto, se debe desconectar cualquier evento nativo y realizar otras operaciones de limpieza.HandlerChanged
se genera después de crear el controlador 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 en un control multiplataforma antes del evento HandlerChanged
.
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:
Page | Controlador de Android | Controlador catalyst de iOS/Mac | Controlador de Windows | Asignador de propiedades | Asignador de comandos |
---|---|---|---|---|---|
ContentPage | PageHandler | PageHandler | PageHandler | Mapper | CommandMapper |
FlyoutPage | FlyoutViewHandler | Teléfono FlyoutPageRenderer | FlyoutViewHandler | Mapper |
CommandMapper |
NavigationPage | NavigationViewHandler | NavigationRenderer | NavigationViewHandler | Mapper |
CommandMapper |
TabbedPage | TabbedViewHandler | TabbedRenderer | TabbedViewHandler | Mapper |
CommandMapper |
Shell | ShellHandler |
ShellRenderer | ShellRenderer | Mapper |
CommandMapper |