Condivisione della tecnologia

Comunicazione tra diversi DataContext in wpf

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 diversiDataContextQuando 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 incrociatiDataContextMeccanismo di comunicazione, ma puoi ottenerlo nei seguenti modi:

1. Meccanismo di passaggio dei messaggi (come EventAggregator)

Utilizza un meccanismo di passaggio di messaggi come nella libreria PrismEventAggregatorO quello fornito con .NETEventAggregatorAttuazione, 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.

2. Servizi condivisi (Servizio)

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.

3. Iniezione di dipendenze

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.

4. ViewModel padre o condiviso

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.

5. Proprietà allegate

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.

Esempio: utilizzo di EventAggregator

Quello che segue è un esempio che utilizza PrismEventAggregatorSemplice esempio di comunicazione tra diversi ViewModel:

  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. });