Teknologian jakaminen

Viestintä eri datakontekstien välillä wpf:ssä

2024-07-12

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

WPF:ssäDataContext Käytetään tyypillisesti tietojen sidonnan luomiseen käyttöliittymäelementtien (kuten ohjausobjektien) ja niiden taustalogiikan (kuten ViewModels) välille.Kun sinun on käytettävä erilaistaDataContextKun kommunikoit eri ViewModelien välillä, tämä tarkoittaa yleensä, että sinun on siirrettävä tietoja eri ViewModelien tai tietokerrosten välillä.

WPF itse ei tarjoa suoraan ristiinDataContextViestintämekanismi, mutta voit saavuttaa sen seuraavilla tavoilla:

1. Viestinvälitysmekanismi (kuten EventAggregator)

Käytä viestin välitysmekanismia, kuten Prism-kirjastoaEventAggregatorTai .NETin mukana tulevaEventAggregatorToteutus, esimMicrosoft.Extensions.Hosting.Internal.IHostedService Toisin kuin mukautettuja tapahtumia (vaikka jälkimmäistä käytetään pääasiassa palveluiden väliseen viestintään), tapahtumia ja viestejä voidaan välittää eri komponenttien tai ViewModels-mallien välillä. Tämän avulla voit julkaista tapahtuman yhdessä ViewModelissa ja tilata tapahtuman toisessa ViewModelissa vastauksena siihen.

2. Jaetut palvelut (Palvelu)

Luo jaettu palveluluokka, joka sisältääDataContext Jaettu data tai logiikka. Voit sitten lisätä tämän palvelun sitä tarvitsevaan ViewModeliin. Tällä tavalla eri ViewModelit voivat kommunikoida epäsuorasti jaettujen palvelujen kautta.

3. Riippuvuusinjektio

Käytä riippuvuuden lisäyskehystä (kuten .NET Coren sisäänrakennettu DI-säilö, Autofac, Ninject jne.) ViewModelin ja muiden luokkien elinkaaren ja riippuvuuksien hallintaan. Tämä auttaa sinua rakentamaan ja konfiguroimaan sovellustasi joustavammin ja voit jakaa riippuvuuksia eri ViewModels-mallien välillä.

4. Vanhempi tai jaettu ViewModel

Jos kahden ViewModelin välillä on vanhempi-lapsi-suhde tai niillä on ylemmän tason ViewModel, voit välittää tietoja tai komentoja ylätason tai jaetun ViewModelin kautta. Tämä edellyttää yleensä tapahtumien tai komentojen määrittämistä ylätason ViewModelissa ja näiden tapahtumien tai komentojen käynnistämistä aliViewModelissa.

5. Liitetyt ominaisuudet

Joissakin tapauksissa voit käyttää liitettyjä ominaisuuksia tiedon siirtämiseen käyttöliittymäelementtien välillä, mutta tätä käytetään yleensä suoraan käyttöliittymäelementtien väliseen viestintään, ei ViewModelien väliseen viestintään. Voit kuitenkin vaikuttaa epäsuorasti ViewModel-mallien väliseen viestintään liittämällä ominaisuuksia, esimerkiksi käynnistämällä komentoja ViewModelissa.

Esimerkki: EventAggregatorin käyttö

Seuraavassa on esimerkki Prisman käytöstäEventAggregatorYksinkertainen esimerkki viestinnästä eri ViewModelien välillä:

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