Partage de technologie

Communication entre différents DataContexts dans wpf

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Dans WPF,DataContext Généralement utilisé pour établir une liaison de données entre les éléments de l'interface utilisateur (tels que les contrôles) et leur logique backend (telle que les ViewModels).Lorsque vous devez utiliser différentsDataContextLors de la communication entre différents ViewModels, cela signifie généralement que vous devez transmettre des informations entre différents ViewModels ou couches de données.

WPF lui-même ne fournit pas directement deDataContextMécanisme de communication, mais vous pouvez y parvenir des manières suivantes :

1. Mécanisme de transmission de messages (tel que EventAggregator)

Utilisez un mécanisme de transmission de messages tel que dans la bibliothèque PrismEventAggregatorOu celui fourni avec .NETEventAggregatorMise en œuvre, telle queMicrosoft.Extensions.Hosting.Internal.IHostedService Contrairement aux événements personnalisés (bien que ces derniers soient principalement utilisés pour la communication entre services), les événements et les messages peuvent être transmis entre différents composants ou ViewModels. Cela vous permet de publier un événement dans un ViewModel et de vous abonner à l'événement dans un autre ViewModel en réponse à celui-ci.

2. Services partagés (Service)

Créez une classe de service partagé qui contient leDataContext Données ou logique partagées. Vous pouvez ensuite injecter ce service dans le ViewModel qui en a besoin. De cette manière, différents ViewModels peuvent communiquer indirectement via des services partagés.

3. Injection de dépendances

Utilisez un framework d'injection de dépendances (tel que le conteneur DI intégré de .NET Core, Autofac, Ninject, etc.) pour gérer le cycle de vie et les dépendances de votre ViewModel et d'autres classes. Cela vous aide à créer et configurer votre application de manière plus flexible et vous permet de partager des dépendances entre différents ViewModels.

4. ViewModel parent ou partagé

S'il existe une relation parent-enfant entre deux ViewModels ou s'ils partagent un ViewModel de niveau supérieur, vous pouvez transmettre des données ou des commandes via le ViewModel parent ou partagé. Cela implique généralement de définir des événements ou des commandes dans le ViewModel parent et de déclencher ces événements ou commandes dans le ViewModel enfant.

5. Propriétés attachées

Dans certains cas, vous pouvez utiliser les propriétés attachées pour transmettre des informations entre les éléments de l'interface utilisateur, mais cela est généralement utilisé pour la communication directe entre les éléments de l'interface utilisateur, et non pour la communication entre les ViewModels. Cependant, vous pouvez indirectement affecter la communication entre les ViewModels en attachant des propriétés, par exemple en déclenchant des commandes dans le ViewModel.

Exemple : utilisation d'EventAggregator

Ce qui suit est un exemple utilisant PrismEventAggregatorExemple simple de communication entre différents ViewModels :

  1. // 定义事件
  2. public class MyEvent : PubSubEvent<string>
  3. {
  4. }
  5. // 发布事件
  6. eventAggregator.GetEvent<MyEvent>().Publish("Hello, World!");
  7. // 订阅事件
  8. eventAggregator.GetEvent<MyEvent>().Subscribe(message =>
  9. {
  10. // 处理消息
  11. Console.WriteLine(message);
  12. });