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:

Button handler architecture.

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 objeto HandlerChangingEventArgs que acompaña a este evento tiene las propiedades NewHandler y OldHandler, de tipo IElementHandler. Cuando la propiedad NewHandler no es null, el evento indica que se va a crear un nuevo controlador para un control multiplataforma. Cuando la propiedad OldHandler no es null, 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:

Ver Interfaz Controlador Asignador de propiedades Asignador de comandos
ActivityIndicator IActivityIndicator ActivityIndicatorHandler Mapper CommandMapper
BlazorWebView IBlazorWebView BlazorWebViewHandler BlazorWebViewMapper
Border IBorderView BorderHandler Mapper CommandMapper
BoxView IShapeView, IShape ShapeViewHandler Mapper CommandMapper
Button IButton ButtonHandler ImageButtonMapper, , TextButtonMapper, Mapper CommandMapper
CarouselView CarouselViewHandler Mapper
Cell CellRenderer Mapper CommandMapper
CheckBox ICheckBox CheckBoxHandler Mapper CommandMapper
CollectionView CollectionViewHandler <Mapper
ContentView IContentView ContentViewHandler Mapper CommandMapper
DatePicker IDatePicker DatePickerHandler Mapper CommandMapper
Editor IEditor EditorHandler Mapper CommandMapper
Ellipse IShape ShapeViewHandler Mapper CommandMapper
Entry IEntry EntryHandler Mapper CommandMapper
EntryCell EntryCellRenderer Mapper CommandMapper
Frame FrameRenderer Mapper CommandMapper
GraphicsView IGraphicsView GraphicsViewHandler Mapper CommandMapper
Image IImage ImageHandler Mapper CommandMapper
ImageButton IImageButton ImageButtonHandler ImageMapper, Mapper
ImageCell ImageCellRenderer Mapper CommandMapper
IndicatorView IIndicatorView IndicatorViewHandler Mapper CommandMapper
Label ILabel LabelHandler Mapper CommandMapper
Line IShape LineHandler Mapper CommandMapper
ListView ListViewRenderer Mapper CommandMapper
Map IMap MapHandler Mapper CommandMapper
Path IShape PathHandler Mapper CommandMapper
Picker IPicker PickerHandler Mapper CommandMapper
Polygon IShape PolygonHandler Mapper CommandMapper
Polyline IShape PolylineHandler Mapper CommandMapper
ProgressBar IProgress ProgressBarHandler Mapper CommandMapper
RadioButton IRadioButton RadioButtonHandler Mapper CommandMapper
Rectangle IShape RectangleHandler Mapper CommandMapper
RefreshView IRefreshView RefreshViewHandler Mapper CommandMapper
RoundRectangle IShape RoundRectangleHandler Mapper CommandMapper
ScrollView IScrollView ScrollViewHandler Mapper CommandMapper
SearchBar ISearchBar SearchBarHandler Mapper CommandMapper
Slider ISlider SliderHandler Mapper CommandMapper
Stepper IStepper StepperHandler Mapper CommandMapper
SwipeView ISwipeView SwipeViewHandler Mapper CommandMapper
Switch ISwitch SwitchHandler Mapper CommandMapper
SwitchCell SwitchCellRenderer Mapper CommandMapper
TableView TableViewRenderer Mapper CommandMapper
TextCell TextCellRenderer Mapper CommandMapper
TimePicker ITimePicker TimePickerHandler Mapper CommandMapper
ViewCell ViewCellRenderer Mapper CommandMapper
WebView IWebView WebViewHandler Mapper CommandMapper

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