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ä erilaistaDataContext
Kun 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 ristiinDataContext
Viestintämekanismi, mutta voit saavuttaa sen seuraavilla tavoilla:
Käytä viestin välitysmekanismia, kuten Prism-kirjastoaEventAggregator
Tai .NETin mukana tulevaEventAggregator
Toteutus, 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.
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.
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ä.
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.
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.
Seuraavassa on esimerkki Prisman käytöstäEventAggregator
Yksinkertainen esimerkki viestinnästä eri ViewModelien välillä:
- // 定义事件
- public class MyEvent : PubSubEvent<string>
- {
- }
-
- // 发布事件
- eventAggregator.GetEvent<MyEvent>().Publish("Hello, World!");
-
- // 订阅事件
- eventAggregator.GetEvent<MyEvent>().Subscribe(message =>
- {
- // 处理消息
- Console.WriteLine(message);
- });