Modèles et idiomes courants dans Xamarin.Mac
Tout au long des API Apple exposées via C#, certains idiomes et modèles apparaissent encore et encore. Si vous avez de l’expérience dans la programmation avec Xamarin.iOS, celles-ci peuvent vous sembler familières. La documentation fait souvent référence à ces modèles et idiomes à plusieurs reprises, donc avoir une bonne compréhension de ceux-ci vous aidera à donner un sens à la documentation que vous trouvez.
MVC - Contrôleur d’affichage de modèle
Le contrôleur de vue de modèle, ou MVC en abrégé, est un modèle très courant dans Cocoa. Une discussion détaillée dépasse le cadre de ce document, mais en bref, il s’agit d’un moyen de structurer votre application en composants :
- Les objets de modèle représentent les données sous-jacentes consultées et manipulées (adresses similaires dans un carnet d’adresses)
- Les objets d’affichage gèrent le dessin d’un objet donné à l’écran et gèrent l’interaction utilisateur (champ de texte affichant l’adresse à l’écran)
- Les objets de contrôleur gèrent l’interaction entre le modèle et la vue. Ils poussent les modifications du modèle « vers le haut » pour mettre à jour l’affichage et poussent les modifications « vers le bas » à partir de l’affichage lorsque les utilisateurs apportent des modifications dans l’interface utilisateur.
Si vous êtes familiarisé avec MVVM (Model View ViewModel) à partir d’autres bibliothèques telles que WPF, le contrôleur agit comme le ViewModel, mais est souvent lié plus étroitement aux éléments d’interface utilisateur spécifiques.
Vous trouverez plus d’informations ici :
Source de données / délégué / sous-classe
Un autre modèle très courant dans Cocoa concerne la fourniture de données aux éléments d’interface utilisateur et la réaction aux interactions utilisateur. À NSTableView
titre d’exemple, vous devez fournir les données de chaque ligne, un ensemble d’éléments d’interface utilisateur qui représentent cette ligne, un ensemble de comportements pour réagir aux interactions utilisateur et éventuellement une certaine personnalisation. La source de données et les modèles de délégué vous permettent de gérer la plupart des cas sans avoir à recourir à la sous-classe NSTableView
vous-même.
La
DataSource
propriété se voit attribuer un instance d’une sous-classeNSTableViewDataSource
personnalisée de qui est appelée pour remplir la table avec des données (viaGetRowCount
etGetObjectValue
).La
Delegate
propriété se voit attribuer une instance d’une sous-classe personnalisée deNSTableViewDelegate
qui fournit l’affichage d’un objet de modèle donné (viaGetViewForItem
) et gère les interactions de l’interface utilisateur (viaDidClickTableColumn
,MouseDownInHeaderOfTableColumn
, etc.).
Dans certains cas, vous souhaiterez personnaliser un contrôle d’une manière bien au-delà des crochets donnés dans le délégué ou la source de données et vous pouvez sous-classer directement l’affichage. Soyez prudent toutefois, dans de nombreux cas, la substitution du comportement par défaut vous obligera alors à gérer tout ce comportement vous-même (la personnalisation du comportement de sélection peut vous obliger à implémenter tous les comportements de sélection vous-même).
Dans Xamarin.iOS, certaines API, telles que UITableView
ont été étendues avec une propriété qui implémente à la fois le délégué et la source de données (UITableViewSource
). Cela permet de contourner la limitation commune selon laquelle une seule classe C# ne peut avoir qu’une seule classe de base, et notre présentation des protocoles est effectuée via des classes de base.
Pour plus d’informations sur l’utilisation des VIews de table dans une application Xamarin.Mac, consultez notre documentation Vue table .
Protocoles
Les protocoles dans Objective-C peuvent être comparés aux interfaces en C#, et dans de nombreux cas, ils sont utilisés dans des situations similaires. Par exemple, l’exemple NSTableView
ci-dessus, le délégué et la source de données sont en fait des protocoles. Xamarin.Mac les expose en tant que classes de base avec des méthodes virtuelles que vous pouvez remplacer. La principale différence entre les interfaces et Objective-C les protocoles C# est que certaines méthodes d’un protocole peuvent être facultatives à implémenter. Vous devez consulter la documentation et/ou la définition d’une API pour déterminer ce qui est facultatif.
Pour plus d’informations, consultez notre documentation sur les délégués, les protocoles et les événements .