Fermer

juillet 11, 2020

Création d'une application ERP performante avec Telerik UI pour Xamarin


Présentation de Telerik ERP: application d'entreprise magnifiquement conçue et hautement performante, construite avec Telerik UI pour les contrôles Xamarin.

Telerik ERP est une application Xamarin vitrine conçue pour démontrer un scénario d'application mobile du monde réel pour la gestion des ressources d'entreprise. L'application est entièrement conçue avec les commandes Telerik UI pour Xamarin et offre aux utilisateurs un beau design et une interface utilisateur hautement performante qui permet à ses utilisateurs de gérer facilement diverses transactions clients et fournisseurs en déplacement, en affichant les dernières des mises à jour et des suivis sur les commandes, les produits, les clients et bien plus encore.

L'application de démonstration ERP Telerik utilise une combinaison des services Azure de Microsoft et Entity Framework pour héberger ses données sur le cloud, et une infrastructure MVVM pour les présenter sur Android, Appareils iOS et UWP.

Dans cet article de blog, nous vous guiderons à travers une vue d'ensemble de la création de l'application ERP – de son backend et de ses services, de la couche MVVM à l'interface utilisateur Telerik pour les contrôles Xamarin qui fournissent l'utilisateur moderne et fluide –

La structure backend de Telerik ERP

Le backend de l'application Telerik ERP est hébergé sur Microsoft Azure Mobile Apps ce qui vous permet d'activer rapidement le cloud pour votre application mobile en stockant ses données en ligne et en vous donnant les outils nécessaires pour y accéder. Le cadre fournit tout ce dont vous avez besoin dès le début.

Les données de l'application sont divisées en deux parties. La première partie contient uniquement les données commerciales (structurées) et la seconde partie contient les images (données non structurées) utilisées dans l'application. Commençons par ce dernier.

Hébergement de données non structurées

Nous utilisons Stockage Azure Blob pour les images, ce qui nous offre un moyen pratique de les servir directement à l'application, supprimant ainsi les tracas d'avoir à enregistrer des images dans une base de données.

Hébergement de données commerciales

Du côté des données commerciales, nous utilisons une application ASP.NET qui se connecte à une base de données SQL Server. Cette application est déployée sur un Azure App Service pour être accessible 24 heures sur 24, 7 jours sur 7, partout dans le monde. Le code de l'application se trouve dans le référentiel git . [19659003] L'application utilise la première approche du code d'Entity Framework pour créer la base de données. Dans le dossier DataObjects vous pouvez trouver toutes les entités dont l'application a besoin. Veuillez noter qu'ils dérivent tous de EntityData . Cela facilitera le processus de sérialisation / désérialisation des données.

Comme dans une application réelle, les entités distinctes sont interconnectées. Notre client dispose d'une collection d'adresses et d'une collection de commandes. Le fait d'avoir de telles relations peut entraîner des complications lors du chargement des informations requises à partir de la base de données. Pour éviter cela, nous avons introduit les TableControllers personnalisés qui se trouvent dans le dossier Controllers . Ces contrôleurs utilisent un ActionFilterAttribute personnalisé pour contrôler les informations supplémentaires qui sont chargées lorsque vous exécutez une requête dans la base de données.

 public class CustomerController: TableController 
{
protected override void Initialize (HttpControllerContext controllerContext )
{
base.Initialize (controllerContext);
telerikerpContext context = new telerikerpContext ();
DomainManager = new EntityDomainManager (context, Request);
}

/ / Tables GET / Client
[ExpandProperty("Addresses")]
public IQueryable GetAllCustomers ()
{
return Query ();
}

// Tables GET / Customer / 48D68C86-6EA6-4C25 -AA33-223FC9A27959
[ExpandProperty("Addresses")]
[ExpandProperty("Orders")]
public SingleResult GetCustomer (identifiant de chaîne)
{
Return Lookup (id);
}
}

Examinons plus en détail le CustomerController .

Vous pouvez voir que la méthode GetAllLCustomers () possède l'attribut ExpandProperty ("Adresses") . Cela remplira la collection d'adresses pour chacun des clients avant de renvoyer le résultat. La méthode GetCustomer (string id) chargera les adresses ainsi que les commandes d'un seul client. Si nous n'avions pas introduit ces contrôleurs, EntityFramework retournerait des collections vides pour les adresses et les commandes et nous serions obligés de faire des allers-retours supplémentaires dans la base de données pour les récupérer.

Pour permettre à EntityFramework de créer, de connecter et de modifier la base de données SQL, nous avons créé un DbContext personnalisé qui peut être trouvé dans les modèles dossier. Ce contexte contient les DbSets séparés dont l'application a besoin, la chaîne de connexion à la base de données et configure le DbModelBuilder . Sur la base de ce contexte et des objets EntityDate, le code EntityFramework génère automatiquement le code qui est utilisé pour créer le schéma de base de données. Ce code est ensuite encapsulé dans une migration qui se trouve dans le dossier Migrations. L'exécution de cette migration préparera toutes les tables de la base de données.

 public class telerikerpContext: DbContext 
{
private const string connectionStringName = "Name = MS_TableConnectionString";

public telerikerpContext (): base (connectionStringName)
{
}

}

DbSet Clients {get; ensemble; }
public DbSet CustomerAddresses {get; ensemble; }
public DbSet Produits {get; ensemble; }
public DbSet Vendors {get; ensemble; }
public DbSet Commandes {get; ensemble; }
public DbSet OrderDetails {get; ensemble; }

override protégé nul OnModelCreating (DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add (
new AttributeToColumnAnnotationConvention (
"ServiceTableColumn", (attributs)). Single (). ColumnType.ToString ()));
}
}

La dernière étape consiste à remplir la base de données avec des données réelles. Ceci est réalisé par une DbMigrationsConfiguration personnalisée qui nous permet de remplacer la méthode Seed () et de contrôler les données qui sont remplies dans les tables de base de données distinctes.

 classe interne scellée Configuration: DbMigrationsConfiguration 
{
configuration publique ()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator ("System.Data.SqlClient", nouveau EntityTableSqlGenerator ());
ContextKey = "telerikerpService.Models .telerikerpContext ";
}

priorité prioritaire void Seed (telerikerpService.Models.telerikerpContext)
{
// Cette méthode sera appelée après la migration vers la dernière version.

if (! Context.Customers.Any ())
{
context.Customers.AddOrUpdate (SeedData.Customers);
context.CustomerAddresses.AddOrUpdate (SeedData.CustomerAddresses);
}

if (! Context.Products.Any ())
{
context.Products.AddOrUpdate (SeedData.Products);
}

if (! Context. Vendors.Any ())
{
context.Vendors.AddOrUpdate (SeedData.Vendors);
}

if (! Context.Orders.Any ())
{[909027] {[
context.Orders.AddOrUpdate (SeedData.Orders);
context.OrderDetails.AddOrUpdate (SeedData.OrderDetails);
}
}
}

Notez que les données initiales réelles sont stockées dans une classe statique qui se trouve dans le dossier App_Start.

Maintenant que vous avez une idée de l'arrière fin, permet de continuer avec la structure de l'application elle-même. Passons en revue l'interface utilisateur et le cadre MVVM au choix.

Telerik ERP: MVVM Framework & UIs

Telerik ERP est construit en utilisant le Xamarin.Forms multiplateforme mobile framework et le MVVM (Model -View-ViewModel). Bien que Xamarin.Forms lui-même offre certaines fonctionnalités pour vous aider à démarrer avec MVVM, il existe d'autres bibliothèques qui vous aideront à structurer et à optimiser le code d'une manière encore meilleure. Un tel cadre est MvvmCross . Il est spécialement développé pour Xamarin et l'écosystème mobile.

En plus de toutes les fonctionnalités fournies par Xamarin.Forms, MvvmCross fournit des fonctionnalités telles que:

  • ViewModel à ViewModel navigation – un support pour le passage et le retour des objets est également fourni.
  • Injection de dépendances intégrée, liaisons et inversion de contrôle.
  • Messagerie étendue
  • De nombreuses classes qui aident à construire l'application.
  • Possibilité de changer la navigation native de la plateforme. [19659041] Lors de la création de notre exemple d'application ERP, nous nous sommes assurés de respecter les meilleures pratiques de programmation de la communauté mondiale de Xamarin – la plupart de vos préoccupations concerneront la création d'applications avec MvvmCross .

    Nous vous avons accompagné à travers le backend, la structure de l'application, alors qu'est-ce qui nous manque? Ah oui! UI! Au-dessus de l'implémentation du code se trouve la belle et très performante interface utilisateur de l'application construite avec les contrôles fournis par Telerik UI pour Xamarin . Approfondissons cette étape finale du cycle de vie du développement d'applications.

    Implémentation ERP MvvmCross

    Application

    Le point de départ de l'application ERP est la classe ErpApplication . Cette classe hérite de MvxApplication – une classe fournie par le cadre MvvmCross . L'idée principale derrière l'application personnalisée est d'ajouter une configuration supplémentaire avant qu'elle ne démarre. Pour l'application ERP, tous les services sont enregistrés ici:

     classe publique ErpApplication: MvxApplication 
    {
    public override void Initialize ()
    {
    CreatableTypes ()
    .InNamespace (typeof ( Services.IErpService) .Namespace)
    .EndingWith ("Service")
    .AsInterfaces ()
    .RegisterAsLazySingleton ();

    RegisterCustomAppStart ();
    }
    }

    Services

    Le AuthenticationService est utilisé par LoginPageViewModel, il prend le nom d'utilisateur et le mot de passe fournis et les valide. Si l'authentification réussit, la page principale est visualisée. Actuellement, le service n'a pas d'implémentation spécifique lors de l'exécution de la connexion. C'est à vous de mettre en œuvre la fonctionnalité souhaitée ici:

     public class AuthenticationService: IAuthenticationService 
    {
    public string UserName {get; ensemble privé; }
    Tâche publique IsAuthenticated ()
    {
    // TODO: Authentification du cache
    renvoie Task.FromResult (false);
    }

    Tâche publique Connexion ( nom d'utilisateur de chaîne, mot de passe de chaîne)
    {
    this.UserName = nom d'utilisateur;
    // permet la connexion avec une combinaison aléatoire de nom d'utilisateur et de mot de passe
    renvoie Task.FromResult (true);
    }
    }

    Le service ERPS établit ensuite la connexion avec la base de données. Son objectif principal est d'exécuter les opérations CRUD avec les données fournies par la base de données. Grâce à son constructeur, un IMvxMessenger est injecté.

     public ErpService (IMvxMessenger messenger) 
    {
    this.messenger = messenger;

    Il s'agit d'un service spécifique fourni par MvvmCross et son objectif principal est d'envoyer des messages aux ViewModels. Afin de recevoir les messages, le ViewModel doit également injecter le service, ce qui vous permet de vous abonner aux messages envoyés par ERPService. Chaque ViewModel doit appeler l'une des méthodes d'abonnement sur IMvxMessenger et doit stocker le jeton renvoyé afin de pouvoir recevoir correctement les messages.

    ViewModels

    Une injection de constructeur est utilisée pour chaque ViewModel – cette injection est utilisée en interne dans MvvmCross lorsque les ViewModels sont créés. La classe de base de chaque ViewModel est la classe MvcViewModel. En héritant de celui-ci, les services pourraient être fournis à chaque ViewModel par injection.

    Les ViewModels sont très importants pour la navigation dans Xamarin.Forms lorsque MvvmCross est utilisé en raison de la ViewModel First Navigation. Cela signifie que nous naviguons de ViewModel à ViewModel et non de View à View. Il est livré avec son propre système de navigation appelé IMvxNavigationService pour naviguer entre ces ViewModels. Presque chaque ViewModel dispose d'un service IMvxNavigationService injecté via son constructeur.

    Jetons un coup d'œil à l'un des ViewModels qui fait partie de l'application ERP – DashboardPageViewModel.

     classe publique DashboardPageViewModel: MvxViewModel 
    {
    public DashboardPageViewModel (Services.IErpService service, IMvxNavigationService navigationService)
    {
    this.service = service;
    this.navigationService = navigationService;
    this.AboutCommand = new MvxCommand (ShowAbout27) [ShowAbout27]

    Comme expliqué ci-dessus, le ViewModel hérite du MvxViewModel et à travers son constructeur un ERPService et IMvxNavigationService sont injectés. À l'intérieur du constructeur, seuls certains champs et propriétés sont affectés. La récupération des données qui vont être visualisées dans la partie Vue se fait dans une méthode spécifique appelée Préparer . Cette méthode fait à nouveau partie de la base MvxViewModel. Il s'agit du point initial du ViewModel. Vous pouvez utiliser cette méthode pour recevoir et stocker des paramètres. Il est appelé chaque fois qu'une navigation est exécutée vers le ViewModel. Ici, les données sont extraites:

     public async override void Prepare () 
    {
    base.Prepare ();

    IsBusy = true;
    attendez ceci.FetchData ();
    si (attendre this.service.SyncIfNeededAsync ())
    {
    attendre FetchData ();
    }
    IsBusy = false;
    }

    À partir de là, la navigation ViewModel n'est exécutée que à la page AboutPage. À cette fin, le service de navigation injecté est utilisé - la navigation s'effectue d'un ViewModel à un autre:

    private void ShowAboutPage ()
    {
    this.navigationService.Navigate ();
    } [19659063] Vues

    MvvmCross utilise la première navigation de ViewModel, ce qui signifie qu'il navigue de ViewModel à ViewModel et non de View à View. Ceci est évité en suivant une convention de dénomination.

    Cependant, pour l'application ERP, nous avons utilisé une autre fonctionnalité fournie par MvvmCross - l'implémentation générique de MvxContextPage où vous pouvez spécifier le ViewModel exact de la page.

    Chaque vue doit hériter à partir de la MvxContextPage au lieu de la page de contenu Xamarin.Forms. Voici comment le DashboardPage hérite de MvxContentPage :

     public partial class DashboardPage: MvxContentPage IMvxOverridePresentationAttribute 

    Ici, le ViewModel de la page est transmis à l'aide de la version générique duontContentv. Il existe des attributs intégrés à travers lesquels le développeur peut définir comment une vue sera affichée. Certains des attributs existants sont utilisés pour indiquer à la page qu'il s'agit d'un Modal ou qu'il se trouve dans un NavigationView.

    L'application Telerik ERP a une apparence unique pour les ordinateurs de bureau, les tablettes et les téléphones, obtenue à l'aide d'attributs de présentation personnalisés. En implémentant IMvxOverridePresentationAttribute, le développeur peut définir un attribut personnalisé spécifique pour la page. Pour DashboardPage par exemple, si l'application est visualisée sur le téléphone, la page est enveloppée dans une page de navigation alors que si elle est sur le bureau ou la tablette, ce n'est pas le cas:

     public MvxBasePresentationAttribute PresentationAttribute (MvxViewModelRequest request) 
    {
    if (Device.Idiom == TargetIdiom.Phone)
    {
    return new MvxTabbedPagePresentationAttribute (TabbedPosition.Tab) {WrapInNavigationPage = true};
    }
    else
    {
    return new MvxTabbed TabbedPosition.Tab) {WrapInNavigationPage = false};
    }
    }

    De plus, pour les différents habillages, la page elle-même a un look différent pour le bureau et le téléphone:





    ]



    [19659079]



    Voici comment la page est visualisée sur iPad et iPhone:

     ERP Demo iPad — Telerik UI for Xamarin " title = "Démo ERP iPad - Interface utilisateur Telerik pour Xamarin" data-method = "ResizeFitToAreaArguments" data-douanizemethodproperties = "{" MaxWidth ":" "," MaxHeight ":" 450 "," ScaleUp ": false," Quality ": "High"} "/> </span data-recalc-dims=  iPhone de démonstration ERP - Interface utilisateur Telerik pour Xamarin" title = "iPhone de démonstration ERP - Interface utilisateur Telerik pour Xamarin" data-method = "ResizeFitToAreaArguments" data-douanizemethodproperties = "{" MaxWidth " : "", "MaxHeight": "450", "ScaleUp": false, "Quality": "High"} "/></p data-recalc-dims=

    Examinons maintenant en profondeur l'implémentation de l'interface utilisateur du page.

    Vues UI

    Les principaux héros de DashboardPage sont deux Telerik UI pour Xamarin contrôles - le Chart et DataGrid .

    . Xamarin Ch arts

    L'interface utilisateur Telerik pour Xamarin fournit de nombreux types de graphiques et de séries extrêmement flexibles - certains d'entre eux sont présentés et visualisés dans la DashboardPage.

    Avec le contrôle de graphique vous pouvez afficher les tendances et des données à l'aide de graphiques linéaires, de graphiques en aires et de graphiques splines, ou de visualiser des comparaisons de données avec des graphiques à barres, et même de représenter des proportions avec des graphiques circulaires. Le PieChart est le principal héros de DashboardPage.

    Les données des canaux de vente sont présentées à l'aide de PieChart. Les données sont fournies au PieChart à l'aide de la PieSeries. La série n'a besoin que d'un ItemsSource fourni pour pouvoir visualiser les données. Les données exactes proviennent de DashboardPageViewModel qui, comme expliqué, récupère ses données lorsque la méthode Prepare est exécutée:








    La légende qui est visualisé sur le côté droit du graphique à secteurs Xamarin est un contrôle distinct. Ce contrôle vous permet de fournir facilement une description des séries visualisées dans le graphique. Le ChartProvider doit uniquement être défini sur le contrôle Chart dont la série sera décrite dans la légende et la légende visualisera les éléments hors de la boîte. À l'aide du LegendTitleBinding de la série, vous pouvez spécifier l'élément qui sera utilisé comme titre pour la légende.

     <telerikChart: RadLegend Grid.Row = "1" Grid.Column = "1" HeightRequest = "200" 
    Style = "{StaticResource LegendStyle}"
    LegendProvider = "{x: Reference Name = pieChart}" />

    Les quantités vendues sont présentées à l'aide d'un autre type de graphique Xamarin - le CartesianChart . Plus précisément, nous avons ici deux LineSeries qui visualisent les données de ventes attendues et réelles. La visualisation de plusieurs types de séries est prise en charge par le contrôle Chart. Pour le CartesianChart, nous avons également spécifié l'axe - horizontal et vertical. CartesianChart trace les points de données dans un système de coordonnées défini par ses deux axes. L'axe lui-même fournit des informations sur les valeurs des points à l'aide de graduations et d'étiquettes de texte. Sur le côté droit du graphique, une légende est également visualisée.

      















    [19659110]













    La vue d'ensemble de l'entreprise et l'état des commandes sont à nouveau visualisées avec RadPieChart. Au lieu de PieSeries, un DonutSeries est utilisé. La série visualise le graphique sous la forme d'un beignet. L'espace vide intérieur est défini en fonction de la propriété InnerRadiusFactor. Chaque élément de données est représenté visuellement par une tranche de beignet. Il n'y a aucune autre différence en le comparant au graphique à secteurs visualisé dans les canaux de vente.

    Une autre série est illustrée dans la page et c'est le BarSeries qui visualise les données des nouveaux clients.

    Un détail vous trouverez des informations sur le contrôle Chart et toutes les séries et axes qu'il fournit dans la documentation officielle de l'interface utilisateur Telerik pour les contrôles Xamarin .

    Xamarin Data Grid

    Les tableaux affichés sur la page sont implémentées à l'aide d'un autre contrôle de la suite - le contrôle Xamarin DataGrid .

    La plupart des données sur Internet sont stockées dans des tableaux dans une base de données. RadDataGrid pour Xamarin fournit la même abstraction sur les données - il a des colonnes et des lignes et l'intersection d'une ligne et d'une colonne - une cellule. Le contrôle prend en charge différents types de colonnes, modes de sélection, chargement de données à la demande, une API de personnalisation riche et bien d'autres fonctionnalités.

    Afin de visualiser des données à l'aide du contrôle DataGrid, sa propriété ItemsSource doit être définie. Par défaut, le contrôle générera des colonnes hors de la boîte en utilisant le type de données fourni. Si vous souhaitez déclarer manuellement les colonnes souhaitées, la propriété AutoGenerateColumns doit être définie sur false.

    Dans DashboardPage, le contrôle DataGrid est utilisé pour visualiser les données des dernières commandes, des produits récemment ajoutés et des meilleurs fournisseurs.

    Voici comment le DataGrid est déclaré pour la partie des meilleurs fournisseurs:

     <telerikDataGrid: RadDataGrid Grid.Row = "2" Grid.ColumnSpan = "2" ItemsSource = "{Binding BestVendors}" 
    AutoGenerateColumns = "false" Style = "{StaticResource DataGridStyle}">




    Vous trouverez plus d'informations sur le contrôle DataGrid et toutes les fonctionnalités qu'il fournit dans notre documentation officielle .

    Xamarin Busy Indicator

    Des commandes Xamarin plus belles et riches en fonctionnalités sont utilisées par certaines des autres pages de l'application. Par exemple, lorsque l'application charge ses données, un BusyIndicator est visualisé pour notifier qu'un processus de longue durée est en cours d'exécution. Le contrôle BusyIndicator prend en charge dix animations différentes (au moment de la rédaction) dès la sortie de la boîte et peut être personnalisé avec vos propres visuels. Voici ce que nous avons sélectionné pour l'application ERP.

     Indicateur occupé - Interface utilisateur Telerik pour Xamarin "data-displaymode =" Personnalisé "title =" Indicateur occupé - Interface utilisateur Telerik pour Xamarin "data-method =" ResizeFitToAreaArguments "data-douanizemethodproperties =" {"MaxWidth ":" "," MaxHeight ":" 450 "," ScaleUp ": false," Quality ":" High "}" /> </span data-recalc-dims=

    Advanced Xamarin ListView

    RadListView est l'un des contrôles Telerik UI For Xamarin les plus utilisés qui est utilisé par l'application ERP pour visualiser les données. Il offre la possibilité de se lier à une source de données et d'afficher des collections de modèles d'éléments dans une liste bien formatée. Différents types de dispositions . sont également pris en charge, par exemple, vous pouvez afficher les données sous forme de liste verticale ou visualiser les éléments dans des lignes et des colonnes à l'aide du mode ListViewGridLayout. Ce contrôle prend en charge une grande variété de fonctionnalités intégrées telles que le regroupement, le tri, le filtrage, la réorganisation , glissement d'élément, fonctionnalité de chargement à la demande (accélère le chargement initial de la page en rendant ite ms qui sont visibles avant de récupérer les éléments restants de la source de données), une excellente API de personnalisation et bien d'autres.

     Xamarin ListView 1 - Interface utilisateur Telerik pour Xamarin "data-method =" ResizeFitToAreaArguments "data- douanizemethodproperties = "{" MaxWidth ":" "," MaxHeight ":" 450 "," ScaleUp ": false," Quality ":" High "}" data-displaymode = "Custom" title = "Xamarin ListView 1 - Interface utilisateur Telerik pour Xamarin "/> </span data-recalc-dims=  Xamarin ListView 2 - Interface utilisateur Telerik pour Xamarin" data-method = "ResizeFitToAreaArguments" data-douanizemethodproperties = "{" MaxWidth ":" "," MaxHeight ":" 450 " , "ScaleUp": false, "Qualité": "Élevé"} "data-displaymode =" Personnalisé "title =" Xamarin ListView 2 — Interface utilisateur Telerik pour Xamarin "/> </span data-recalc-dims=  Xamarin ListView 3— Interface utilisateur Telerik pour Xamarin "data-method =" ResizeFitToAreaArguments "data-douanizemethodproperties =" {"MaxWidth": "", "MaxHeight": "450", "ScaleUp": false, "Quality": "High"} "data- displaymode = "Custom" title = "Xamarin ListView 3 — Interface utilisateur Telerik pour Xamarin" /> [19659002] La fonctionnalité de filtrage <a href= de RadListView est démontrée par l'application ERP en combinaison avec l'aide d'une autre interface utilisateur Telerik pour le contrôle Xamarin appelée RadEntry.

    Le contrôle d'entrée Telerik fournit le fonctionnalité de base attendue par n'importe quelle entrée, mais elle offre bien plus encore, y compris la possibilité de personnaliser l'apparence de la bordure autour de l'entrée à l'aide de la propriété BorderStyle.

    Le contrôle Xamarin Popup est utilisé par les pages pour visualiser des boîtes de dialogue avec du contenu supplémentaire au-dessus d'autres commandes parmi lesquelles l'utilisateur peut choisir. Le composant fournit une API flexible pour contrôler facilement son comportement et rend possible la mise en œuvre d'une logique complexe pour un large éventail de scénarios. Vous pouvez le rendre modal (ce qui rend l'interface utilisateur derrière lui inactive) si vous devez ou modifier l'animation utilisée lorsque le contrôle est visualisé et se ferme.

    De nombreux autres contrôles comme RadNumericInput RadBorder RadButton et RadPath sont utilisés par les pages.

     Autres commandes 1 - Telerik UI for Xamarin "data-displaymode = "Custom" title = "Autres contrôles 1 — Interface utilisateur Telerik pour Xamarin" data-method = "ResizeFitToAreaArguments" data-douanizemethodproperties = "{" MaxWidth ":" "," MaxHeight ":" 450 "," ScaleUp ": false, "Qualité": "Élevée"} "/> <img decoding=

    Le Telerik NumericInput pour Xamarin.Forms offre la possibilité de définir ou de modifier un numéro double spécifique soit en utilisant le champ de saisie, soit en utilisant les boutons d'augmentation et de diminution. Les boutons utilisés par le numérique sont des boutons radiaux. RadButton fournit toutes les fonctionnalités de base attendues par un contrôle Button, mais en plus, il ajoute des fonctionnalités telles que l'alignement du contenu, la prise en charge de l'image d'arrière-plan, la fonctionnalité permettant de rendre le bouton circulaire et plus encore. Enfin, mais non des moindres, le contrôle RadBorder. Using it you can place a border with specific thickness and corner radius around each Xamarin.Forms control.

    Using Xamarin.Forms in a combination with MvvmCross and the Telerik UI for Xamarin controls we were able to build a beautiful, fast and feature-rich application that enables you to manage and grow your business with ease from every corner of the planet.

    Conclusion

    The Telerik ERP is more than a demo application – it’s a fully-functional, feature-rich cross-platform enterprise resource management app build with Telerik’s high-performant UI controls for Xamarin, Microsoft Azure’s services & the MvvmCross framework.

    The application will enable its users to quickly and easily access and manage business critical information regarding relations with customers and vendors, business transactions, and the latest updates and follow-ups on products and orders. In todays’ complex and dynamic global economy, the Telerik ERP app is a must-have for any business that requires remote access and monitoring of their business information.

    You want to take the Telerik ERP app for a test? Download the Telerik UI for Xamarin and head to github for the Telerik ERP source code.

    Want to take a deep dive into all Xamarin.Forms Sample Applications by Telerik? Download our whitepaper!

    The Ultimate Guide to Xamarin.Forms Mobile Development with Real-World Sample Applications





Source link