- article
Parcourir les exemples
Le modèle Model-View-ViewModel (MVVM) impose une séparation entre trois couches logicielles : l'interface utilisateur XAML (appelée la vue), les données sous-jacentes (appelées le modèle) et l'intermédiaire entre la vue et le modèle (appelé le ViewModel ). Les vues et les modèles de vue sont généralement connectés via des liaisons de données définies en XAML. Pouréquipe de liaison
Une vue est généralement une instance d'un modèle de vue.
Magnifique
L'interface utilisateur de l'application multiplateforme .NET (.NET MAUI) envoie des mises à jour de liaison au thread d'interface utilisateur. Lorsque vous utilisez MVVM, qui vous permet de mettre à jour les propriétés du modèle d'affichage lié aux données à partir de n'importe quel thread, le connecteur .NET MAUI transmet les mises à jour au thread d'interface utilisateur.
MVVM simple
consisteExtension de balisage XAML, vous avez appris à définir une nouvelle déclaration d'espace de noms XML pour permettre aux fichiers XAML de référencer des classes dans d'autres assemblys. Dans l'exemple ci-dessous, l'extensionx : statique
Obtenir un jeton pour la date et l'heure actuelles d'une propriété statiqueDate Heure. Maintenant
plutôtSystème
nom:
Dans cet exemple, la valeur est récupéréeheure de rendez-vous
défini commeéquipe de liaison
dans undisposition des agrafes.Lorsque vous réglez suréquipe de liaison
Un élément dont héritent tous les enfants de cet élément. Cela signifie que tous les enfants ontdisposition des agrafesle mêmeéquipe de liaison
et peut contenir des liaisons aux propriétés de cet objet :
Le problème, cependant, est que la date et l'heure sont définies une fois lors de la création et de l'initialisation de la page et ne changent jamais.
Une page XAML peut afficher une horloge qui affiche toujours l'heure actuelle, mais cela nécessite un code supplémentaire. Le modèle MVVM est un choix naturel pour les applications .NET MAUI lors de la liaison de données de propriété entre des objets visuels et des données sous-jacentes. Lorsque vous pensez à MVVM, Models et ViewModels sont des classes entièrement écrites en code. Une vue est généralement un fichier XAML qui fait référence aux propriétés définies dans le modèle de vue via la liaison de données. Dans MVVM, le modèle ignore le modèle de vue et le modèle de vue ignore la vue. Cependant, vous faites généralement correspondre les types affichés par le modèle d'affichage aux types associés à l'interface utilisateur.
Remarques
Dans des exemples MVVM simples comme celui présenté ici, il n'y a généralement pas de modèle, le modèle se compose simplement d'une vue et d'un modèle de vue connectés via une liaison de données.
L'exemple suivant montre un modèle d'affichage pour une montre qui contient une classe nomméeheure de rendez-vous
Mettre à jour chaque seconde :
à l'aide de System.ComponentModel, à l'aide de System.Runtime.CompilerServices, de l'espace de noms XamlSamples, de la classe ClockViewModel : INotifyPropertyChanged { événement public PropertyChangedEventHandler PropertyChanged ; DateHeure privée _dateTime ; (_dateTime!=Property_Changed); } } public ClockViewModel() { this.DateTime = DateTime.Now ; // Met à jour la propriété DateTime toutes les secondes. _timer = new Timer(new TimerCallback(s) => this.DateTime = DateTime.Now), null, TimeSpan.Zero, TimeSpan.FromSeconds(1)); } ~ClockViewModel() => _timer.Dispose(); public void OnPropertyChanged([CallerMemberName] string name = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));}
Viewmodel implémente généralement une interfaceINotifyPropertyChanged
, qui permet aux classes de déclencher des événementschangé de propriétaire
Chaque fois qu'une de ses propriétés change. Le mécanisme de liaison de données dans .NET MAUI ajoute un gestionnaire pour celachangé de propriétaire
afin que lorsqu'une propriété change, elle puisse être notifiée et la cible mise à jour avec la nouvelle valeur. Dans l'exemple de code précédent, la méthode gèreOnPropertyChanged
Déclenchez un événement tout en déterminant automatiquement le nom source d'une propriété :heure de rendez-vous
.
L'exemple suivant montre le code XAML utiliséModèle d'affichage de l'horloge
:
Dans cet exempleModèle d'affichage de l'horloge
Défini commeéquipe de liaison
étiquette d'élémentcontenu de la pageusage des biens. Les fichiers code-behind peuvent également créer des modèles d'affichage.
extensionficeler
enregistrertexte
sa propriétéUne inscriptionformerheure de rendez-vous
propriété. La capture d'écran suivante montre le résultat :
Vous avez également accèsheure de rendez-vous
Affichez les propriétés du modèle de vue en les séparant par des points :
MVVM interactif
MVVM est souvent utilisé avec une liaison de données bidirectionnelle pour les vues interactives basées sur le modèle de données sous-jacent.
L'exemple ci-dessous montreHslViewModel
conversion uncouleurvaleurthon
étaient,saturation
Attendrebriller
, puis encore :
de System.ComponentModel, de System.Runtime.CompilerServices, de XamlSamples, de HslViewModel : INotifyPropertyChanged μβάν PropertyChangedEventHandler PropertyChanged ; flotteur privé _hue, _saturation, _luminosity ; si! (valeur, _saturation, _luminosité) ; } } public float Saturation { obtenir => _saturation ; set { if (_saturation != value) Color = Color.FromHsla(_hue, value , _luminosity); } } public float Luminosité { get => _φωτεινότητα ; set { if (_luminosity!= value) Color = Color.FromHsla(_hue, _saturation, value); } } public Couleur Couleur { get => _color; set { if(_color != valeur) { _color = valeur ; _hue = _color.GetHue(); _saturation = _color.GetSaturation(); _luminosité = _color.GetLuminosity(); OnPropertyChanged("Teinte"); OnPropertyChanged("Saturation"); OnPropertyChanged("Luminosité"); OnPropertyChanged ); } } public void OnPropertyChanged([CallerMemberName] string name = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }
Dans cet exemplethon
modifier les propriétés,saturation
Attendrebriller
entraîner des modificationscouleur
Propriété et changementscouleur
La propriété modifie les trois autres propriétés. Ceci est similaire à une boucle infinie, sauf que le modèle de vue n'appelle pas l'événementchangé de propriétaire
, sauf si la maison a été modifiée.
L'exemple XML suivant contientboîte de vueNéecouleur
Cette propriété est liée àcouleur
afficher les propriétés du modèle et trois et troisUne inscriptionglissièreVues associéesthon
Caractéristiques,saturation
Attendrebriller
:
par obligationUne inscriptionest le réglage par défautLoin
.Il suffit d'afficher la valeur. La liaison par défaut pour chaqueglissièreEstrue à double sens
.Ceci initialise leglissièredu modèle de visualisation. Lorsque le modèle d'affichage est créé, c'est le cascouleur
la propriété a de la valeurcourse d'eau
.changer unglissièreDéfinissez une nouvelle valeur pour la propriété sur le modèle de vue, puis calculez la nouvelle couleur :
Série
Parfois, une application doit aller au-delà de la propriété en demandant à l'utilisateur d'émettre des commandes qui affectent quelque chose dans le modèle d'affichage. Ces commandes sont généralement signalées en cliquant ou en touchant un bouton et sont généralement gérées dans le fichier de code derrière les gestionnaires d'événementsCliquez sur
vanboutonL'événementennuyé
l'un desAppuyez sur ID de geste.
L'interface d'exécution de commande offre une alternative à l'implémentation de commande plus adaptée à l'architecture MVVM. Un modèle de vue peut contenir des commandes, qui sont des méthodes exécutées en réponse à des activités spécifiques dans la vue, telles queboutonCliquez sur. Des liaisons de données sont définies entre ces commandes etbouton.
Autorisation des liaisons de données entre unboutonvous êtes un modèle de projection, définiboutonDeux propriétés :
Série
vas-y mecSystem.Windows.Input.ICCommandSystem.Windows.Input.ICCommandparamètres de commande
vas-y mecBut
Remarques
De nombreux autres contrôles définisSérie
Il y a aussi des propriétés etparamètres de commande
.
L'interfaceSérieest défini dans l'espace de nomssystem.windows.inputIl se compose de deux méthodes et d'un événement :
exécuter non valide (paramètre d'objet)
booléen CanExecute (paramètre d'objet)
Utiliser EventHandler CanExecuteChanged
Les modèles de vue peuvent définir des propriétés de typeSérie
.Vous pouvez ensuite lier ces propriétésSérie
la propriété de chacunboutoncomposant ou un autre composant, ou éventuellement une vue personnalisée qui implémente cette interface. Vous pouvez choisir de définirparamètres de commande
propriétés qui identifient un objet individuelbouton(ou d'autres éléments) à lier à cette propriété de modèle de vue. Interne, appelboutonIlmettre en œuvre, exécuter
méthode à chaque clic de l'utilisateur,boutonje passe àmettre en œuvre, exécuter
méthode sonoreparamètres de commande
.
Ilpeut être effectuée
Méthodes etDes modifications peuvent être apportées
Cet événement est utilisé dans les cas suivantsboutonLe robinet n'est peut-être pas valide pour le moment, doncboutonIl devrait s'éteindre. appel téléphoniqueboutonpeut être effectuée
Lorsque la propriété est définie surSérie
premier et chaque événementDes modifications peuvent être apportées
est activé. Imprudentpeut être effectuée
RENDEMENTInexacte
, Ceboutons'éteint et ne génère pas d'appels versmettre en œuvre, exécuter
.
tu peux l'utiliserSérie
une sorte deSérie
Inclus dans .NET MAUI pour implémenter l'interfaceSérie
.Ces deux classes définissent des constructeurs différents et unchangement actionnable
Une méthode que le modèle d'affichage peut appeler pour appliquer l'objetSérie
événement déclencheurDes modifications peuvent être apportées
.
L'exemple suivant montre le modèle d'affichage d'un clavier simple pour la saisie d'un numéro de téléphone :
en utilisant System.ComponentModel, en utilisant System.Runtime.CompilerServices, en utilisant System.Windows.Input, l'espace de noms XamlSamples, la classe KeypadViewModel : INotifyPropertyChanged{ événement public PropertyChangedEventHandler PropertyChanged ; ; char privé[] '*}_specialChars ICommand AddCharCommand { get; ensemble privé? } public ICommand DeleteCharCommand { obtenir ; ensemble privé? } chaîne publique InputString { obtenir => _inputString ; ensemble privé { if (_inputString != valeur) { _inputString = valeur ; OnPropertyChanged(); DisplayText = FormatText(_inputString); // Peut-être que le bouton de suppression devrait être activé/désactivé. ((commande)DeleteCharCommand).ChangeCanExecute(); } } } chaîne publique DisplayText { get => _displayText ; set privé { if (_displayText != value) { _displayText = value; OnPropertyChanged(); } } } public KeypadViewModel() { // Commande pour ajouter une clé à la chaîne d'entrée AddCharCommand = nouvelle commande((clé) => InputString += clé); // La commande supprime un caractère de la chaîne d'entrée si autorisé DeleteCharCommand = new Command( // La commande supprime un caractère de la chaîne d'entrée () => InputString = InputString .Substring(0 , InputString.Length - 1), // gérer CanExecute ici, retourner true s'il y a quelque chose à supprimer() => InputString.Length > 0); } string FormatText(string str) { bool hasNonNumbers = str. IndexOfAny(_specialChars) != -1; Format de chaîne = str; // formater la chaîne par type de données et longueur if (hasNonNumbers || str.Length < 4 || str.Length > 10) { // des caractères spéciaux sont présents, ou la chaîne est trop courte ou trop longue pour un formatage spécial // ne rien faire } sinon si (str.Length < 8) formaté = string.Format("{0}-{1}", str.Substring( 0, 3), str.Substring( 3)); sinon formaté = string.Format("({0}) {1}-{2}", str.Substring(0, 3), str.Substring(3, 3), str.Substring(6) ); format de retour ? } public void OnPropertyChanged([CallerMemberName] name string = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }
Dans cet exemplemettre en œuvre, exécuter
Méthodes etpeut être effectuée
L'instruction for est définie comme une fonction lambda dans le constructeur. le modèle de projection supposeAjouter une commande de dessin
la propriété est liéeSérie
Propriétés pour plusieurs boutons (ou tout autre contrôle d'interface de commande), chacun défini par un .paramètres de commande
Ces boutons ajoutent des caractèreschaîne d'entrée
attribut, qui est ensuite formaté comme un numéro de téléphonetexte d'affichage
propriété. Il existe également une deuxième catégorie de biens immobiliersSérie
A été appelécommande pour supprimer des caractères
.Ceci est lié au bouton de retour arrière, mais doit être désactivé s'il n'y a pas de caractères à supprimer.
L'exemple suivant montre le code XAML utilisé :KeyboardViewModel
< Grid.RowDefinities> < /Grid.RowDefinitions> < Button Text="0" Command="{Binding AddCharCommand}" CommandParameter="0" Grid.Row="4" Grid.Column="1" />
Dans cet exempleSérie
première propriétéboutonC'est la même chose quecommande pour supprimer des caractères
.Il a d'autres boutons qui lui sont associésAjouter une commande de dessin
Dansparamètres de commande
avec de l'éclat dedansbouton:
FAQs
What is MVVM in .NET Maui? ›
NET MAUI app development. MVVM is a UI design pattern for decoupling UI and non-UI code. data binding is the key technology that MVVM relies on. We will improve the design of our app using MVVM and data binding. We will also replace the data model using open source libraries.
Which markup language can you use to lay out the UI for a .NET Maui application? ›C# Markup is a set of fluent helper methods and classes designed to simplify the process of building declarative . NET Multi-platform App UI (. NET MAUI) user interfaces in code.
Does .NET Maui have a designer? ›There is no visual designer for producing XAML in . NET MAUI apps. All XAML must be hand-written, but you can use XAML hot reload to view your UI as you edit it.
What is MVVM binding? ›With MVVM, you define your UI declaratively in XAML and use data binding markup to link it to other layers containing data and commands. The data binding infrastructure provides a loose coupling that keeps the UI and the linked data synchronized and routes user input to the appropriate commands.
Is .NET MAUI worth learning? ›If you need a cross-platform UI solution that can run on any or all of Android, iOS, Mac, Windows, and potentially the Web, and you're prepared for a bit of a bumpy ride then I would say absolutely yes.
What is MVVM for beginners? ›MVVM stands for Model, View, ViewModel. It is an architectural pattern implemented in applications to separate user interface code from data and business logic. With a clear separation of these components, all components of the app can be unit-tested, components can be reused within the app or across the app.
Does .NET MAUI use C#? ›.NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML. Using .NET MAUI, you can develop apps that can run on Android, iOS, macOS, and Windows from a single shared code-base.
What is the easiest language to create a UI? ›For someone who'd like to design a UI interface of their own, GUI Python is an easy-to-use programing language that can be mastered by almost all levels of users. Now, read on to find more cross-platform frameworks for GUI programming in Python.
Can .NET MAUI run in browser? ›NET Multi-platform App UI (. NET MAUI) IBrowser interface. This interface enables an application to open a web link in the system-preferred browser or the external browser.
Does Oprah own Maui? ›The talk show trailblazer already owned over 100 acres of Maui land, according to the report, meaning Winfrey now owns roughly 1,000 acres on the island. The acquisition was met with mixed reactions from local residents, some of whom worried that the purchase would contribute to the displacement of native Hawaiians.
What is the difference between NET MAUI and flutter? ›
NET MAUI supports hot reload, which allows developers to check the changes they make in the UI in real time, saving time and effort. On the other hand, Flutter provides a highly customizable and performant UI framework with a wide range of customizable UI widgets and animations.
Does .NET MAUI use XAML? ›NET MAUI app contains three XAML files, and their associated code-behind files: The first file pairing is App. xaml, a XAML file, and App.
Why MVVM is better? ›MVVM is better than MVC/MVP because of its unidirectional data and dependency flow. Dependency is one way, thus it is a lot easier to decouple it when we need to. It is also easier for testing. All my projects(written in Kotlin for Android app) are based on MVVM.
What is MVVM good for? ›Advantages. MVVM facilitates easier parallel development of a UI and the building blocks that power it. MVVM abstracts the View and thus reduces the quantity of business logic (or glue) required in the code behind it.
What is the main advantage of MVVM? ›Advantages of using MVVM Design Pattern
Your code is decoupled. The package structure is even easier to navigate. The project is even easier to maintain. Your team can add new features even more quickly.
Greater performance: Since it uses less memory and CPU than Xamarin Forms, there will be better performance overall. Building native UI: By leveraging the same platform-specific code as other platforms, such as Android or iOS, you may generate the same look and feel for your application.
Which is better Maui or Flutter? ›Both Flutter and . Net MAUI are powerful frameworks for cross-platform app development. However, given the thriving developer community and extensive package ecosystem, Flutter emerges as the better choice for most projects.
Is .NET MAUI easy to use? ›NET MAUI application runs on any machine like windows or android emulator. It provides a variety of controls and widgets, and it's easy to use; you can get started with just a few lines of code. It is a set of libraries and tools that make it easy to create . NET cross-platform applications.
Who uses MVVM? ›The pattern is often used in Windows and web graphics presentation software. The MVVM pattern is used in Windows Presentation Foundation (WPF), which runs on Microsoft's .
What is MVVM full for? ›MVVM stands for Model, View, ViewModel. Model: This holds the data of the application.
Is MVVM a pattern or architecture? ›
MVVM is an architectural pattern, invented by Microsoft architects Ken Cooper and Ted Peters. MVVM (Model-View-ViewModel) cleanly separates the business logic of an application from the user interface. The ultimate goal of MVVM architecture is to make the view completely independent from the application logic.
Is .NET MAUI a replacement for WPF? ›NET MAUI is an extension of what was Xamarin Forms, you can write a single piece of C# code that will run on Windows, Mac, Android, and iOS. Another big benefit of using MAUI is that you are effectively writing code in WPF (Windows Presentation Foundation). MAUI isn't WPF, but it is close.
Is Maui a replacement for Xamarin? ›NET MAUI stands for . NET Multi-platform App UI. It is a bit of a mouthful but essentially all it is is the next iteration of Xamarin… Yes, it's Xamarin vNext, so instead of there being a Xamarin.
Is it hard to learn Xamarin? ›Integration with Microsoft tools: Xamarin integrates well with Microsoft tools, making it easy to use for developers who are already familiar with Microsoft technologies. Easy to learn: Xamarin is easy to learn for developers who are already familiar with C# and . NET.
Can you learn UI on your own? ›Most great UI/UX Designers are self-taught, at least when starting their careers. So, how exactly do you go about learning how to create visually appealing digital items for your own use? There isn't a single right or wrong way to learn UI/UX design because there are so many options.
What coding is needed for UI design? ›If you are thinking of getting into UI/UX design, you probably have this question in mind. The answer is no. UI/UX design is one among numerous non-technical roles in tech that doesn't require any coding or programming skills.
Do you need to learn coding for UI? ›UI Designers do not need to code, but it is extremely beneficial if you have programming skills. Depending on the nature of the product, it's also not unusual for UI/UX design and development to be intertwined into a single process.
How stable is .NET MAUI? ›NET MAUI is mature with stable runtime and tooling—this essentially means lot more developers are building serious mobile/desktop apps.
Does .NET MAUI use HTML? ›The . NET Multi-platform App UI (. NET MAUI) WebView displays remote web pages, local HTML files, and HTML strings, in an app. The content displayed a WebView includes support for Cascading Style Sheets (CSS), and JavaScript.
What is the minimum Android for .NET MAUI? ›. NET MAUI Blazor apps have the following additional platform requirements: Android 7.0 (API 24) or higher is required. iOS 14 or higher is required.
What is the difference between Maui MVC and MVVM? ›
MVVM is refined from MVC; it supports two-way data binding between View and ViewModel. This allows automatic propagation of changes inside the state of ViewModel to the View. The MVVM pattern includes three key parts: Model: Represents the data with validation and business logic.
What does MVVM stand for? ›Model-View-ViewModel (MVVM) is a software design pattern that is structured to separate program logic and user interface controls.
What is the difference between .NET MVC and MVVM? ›MVVM separates the different components of the development process into three categories, model, view and ViewModel. This typically involves code markup or graphical user interfaces (GUI). MVC, or model-view-control is a way developers separate programs into these three components.
What is the main purpose of MVVM? ›The Model-View-ViewModel (MVVM) pattern helps to cleanly separate the business and presentation logic of an application from its user interface (UI).
Is .NET MAUI same as Xamarin? ›NET MAUI is an evolution of Xamarin. Forms, they have most of their features in common. You can get almost all things in . NET MAUI that Xamarin has, like controls, layouts, Shell, gestures, templates, and cross-platform APIs for device features.
Which framework uses MVVM? ›The Windows Presentation Framework (WPF) takes full advantage of the Model-View-ViewModel (MVVM) pattern.
Is .NET and NET MVC same? ›The main difference between ASP.NET Core and ASP.NET MVC 5 is their cross-platform approach. ASP.NET Core can be used on Windows, Mac, or Linux, whereas ASP.NET MVC 5 can only be used for applications on Windows. The ASP.NET Core MVC is a framework for building web apps and APIs, optimized for use with ASP.NET Core.
What is .NET vs .NET core vs MVC? ›ASP.NET Core is the latest version of ASP.NET, and it includes many improvements over ASP.NET MVC. The most significant difference between asp net mvc vs asp net core is that it's a cross-platform framework. You can use it to build web applications that can run on Windows, Linux, or macOS.
What is the difference between .NET and .NET MVC? ›Asp.Net Web Form has built-in data controls and best for rapid development with powerful data access. Asp.Net MVC is lightweight, provide full control over markup and support many features that allow fast & agile development. Hence it is best for developing an interactive web application with the latest web standards.
What is MVVM advantages and disadvantages? ›MVVM facilitates easier parallel development of a UI and the building blocks that power it. MVVM abstracts the View and thus reduces the quantity of business logic (or glue) required in the code behind it. The ViewModel can be easier to unit test than in the case of event-driven code.
What are the issues with MVVM? ›
Disadvantages of MVVM:
Communication between various MVVM components and data binding can be painful. Code reusability of views and view model is difficult. Managing view models and their state in nested views and complex UI's is difficult.
Short Answer: Don't use MVVM if you are not using WPF/Silverlight/any technology I know with powerful automatic binding. Long Answer: No other pattern facilitates unit testing better than MVVM in WPF/Silverlight.