le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Nel WPF,DataContext
In genere utilizzato per stabilire l'associazione dati tra gli elementi dell'interfaccia utente (come i controlli) e la relativa logica di back-end (come ViewModel).Quando è necessario utilizzare diversiDataContext
Quando si comunica tra diversi ViewModel, ciò significa in genere che è necessario passare informazioni tra diversi ViewModel o livelli dati.
Lo stesso WPF non fornisce direttamente servizi incrociatiDataContext
Meccanismo di comunicazione, ma puoi ottenerlo nei seguenti modi:
Utilizza un meccanismo di passaggio di messaggi come nella libreria PrismEventAggregator
O quello fornito con .NETEventAggregator
Attuazione, come ad esempioMicrosoft.Extensions.Hosting.Internal.IHostedService
A differenza degli eventi personalizzati (sebbene quest'ultimo venga utilizzato principalmente per la comunicazione tra servizi), eventi e messaggi possono essere passati tra diversi componenti o ViewModel. Ciò consente di pubblicare un evento in un ViewModel e iscriversi all'evento in un altro ViewModel in risposta ad esso.
Crea una classe di servizio condiviso che contenga il fileDataContext
Dati o logica condivisi. È quindi possibile inserire questo servizio nel ViewModel che ne ha bisogno. In questo modo, diversi ViewModel possono comunicare indirettamente tramite servizi condivisi.
Utilizzare un framework di inserimento delle dipendenze (ad esempio il contenitore DI integrato di .NET Core, Autofac, Ninject e così via) per gestire il ciclo di vita e le dipendenze del ViewModel e di altre classi. Ciò ti aiuta a creare e configurare la tua applicazione in modo più flessibile e ti consente di condividere le dipendenze tra diversi ViewModel.
Se esiste una relazione padre-figlio tra due ViewModel o condividono un ViewModel di livello superiore, è possibile passare dati o comandi tramite il ViewModel padre o condiviso. Ciò in genere comporta la definizione di eventi o comandi nel ViewModel padre e l'attivazione di tali eventi o comandi nel ViewModel figlio.
In alcuni casi, è possibile utilizzare le proprietà associate per passare informazioni tra elementi dell'interfaccia utente, ma questo viene generalmente utilizzato per la comunicazione diretta tra elementi dell'interfaccia utente, non per la comunicazione tra ViewModel. Tuttavia, è possibile influenzare indirettamente la comunicazione tra ViewModel allegando proprietà, ad esempio attivando comandi in ViewModel.
Quello che segue è un esempio che utilizza PrismEventAggregator
Semplice esempio di comunicazione tra diversi ViewModel:
- // 定义事件
- public class MyEvent : PubSubEvent<string>
- {
- }
-
- // 发布事件
- eventAggregator.GetEvent<MyEvent>().Publish("Hello, World!");
-
- // 订阅事件
- eventAggregator.GetEvent<MyEvent>().Subscribe(message =>
- {
- // 处理消息
- Console.WriteLine(message);
- });