Annuaire d'articles
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.