Comment WPF définit les événements de publication d'abonnement globaux

avant-propos

Nous avons besoin d'une fonction d'abonnement et de publication d'événements mondiaux pour réaliser la communication de page. Faire communiquer deux pages sans rapport à travers un volume intermédiaire.

le code

IEventAggregator : collection d'abonnements aux messages

Il s'agit de la fonction d'abonnement aux messages fournie par Prism. Utilisez comme suit

Définir le type d'abonnement, c'est-à-dire un mot-clé

PubSubEvent<><>里面存放的是订阅的数据类型,推荐使用元祖
///
public class EventClass : PubSubEvent<string>
{
    
    

}

Boîtier officiel, utilisé dans ViewModel


private readonly IEventAggregator eventAggregator;
 public string MyTitle {
    
     get; set; }
 public ViewAViewModel(IEventAggregator eventAggregator)
 {
    
    
     
     //通过Prism注入得到
     this.eventAggregator = eventAggregator;

	//订阅
     eventAggregator.GetEvent<EventClass>().Subscribe(res =>
     {
    
    
         Debug.WriteLine(res.ToString());
     });
     //推送
	 eventAggregator.GetEvent<EventClass>().Publish("我是侧边栏传来的值:事件通知");
 }

Conseils : La valeur transmise dans l'abonnement est liée au type de <> défini dans EventClass : PubSubEvent<string>.

Mais après mon test, il semble qu'il ne puisse pas communiquer entre les pages.

modification logique

    public partial class App
    {
    
    
    	//在App.xaml中进行声明
        public static IEventAggregator EventAggregator {
    
     get;set; } = new EventAggregator();
        
    }

Correspondant à chaque page xxxView, un xxxViewEvent est défini.

Abonnez-vous à votre propre ViewEvent dans le constructeur de chaque ViewModel, afin que d'autres pages puissent directement pousser l'événement pour réaliser le transfert de valeur de routage. Analysez la valeur de retour sous la forme d'une clé et d'une valeur.

Mallette de démonstration

public ViewAViewModel(IEventAggregator eventAggregator)
        {
    
    
            
            App.EventAggregator.GetEvent<ViewAEvent>().Publish("我是ViewModel传来的值");

            App.EventAggregator.GetEvent<ViewAEvent>().Subscribe(res =>
            {
    
    
                Debug.WriteLine(res.ToString());
                MyTitle = res;
            });
        }

Résumer

Prism et WPF nous ont donné de nombreuses solutions, mais en fait nous n'avons besoin que de la solution la plus simple et la plus facile à utiliser. Avec la communication par page, il n'est pas du tout nécessaire de router la communication. Vous pouvez communiquer avec la page directement une fois le saut de page terminé. Une solution unifiée et élégante est ce dont nous avons besoin.

Je suppose que tu aimes

Origine blog.csdn.net/qq_44695769/article/details/131928024
conseillé
Classement