2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
In WPF,DataContext
Typice usus est ad confirmandas notitias ligandas inter elementa UI (qualia regimina) et logicam eorum posteriorem (ut ViewModels).Cum opus est ut diversumDataContext
Cum communicare inter diversas ViewModels, hoc plerumque significat vos postulo ut informationes transgrediaris inter ViewModels vel notitias diversas stratis.
WPF ipsum non directe praebet cross-DataContext
Mechanismum communicativum, sed hoc modo consequi potes:
Nuntium transiens mechanismum utere ut in Bibliotheca PrismatisEventAggregator
Aut qui venit cum .NETEventAggregator
Exsecutio, utMicrosoft.Extensions.Hosting.Internal.IHostedService
Consuetudo eventuum dissimilis (quamvis haec maxime adhibeatur ad communicationem inter officia), eventus ac nuntii inter diversas partes vel ViewModels transiri possunt. Hoc permittit ut rem in uno ViewModel edas et in alio ViewModel eventum subscribas in responsione ad illud.
Facere commune servitium id quod continetDataContext
Communes notitia seu logica. Potes igitur hoc officium in ViewModel injicere, quod eo indiget. Hoc modo diversae ViewModels indirecte per officia communium communicare possunt.
Utere dependentia iniectio compage (ut constructum NET Core in DI continente, Autofac, Ninject, etc.) ad administrandum cyclum vitam et dependentias tuas ViewModel et aliorum generum. Hoc adiuvat te aedificare et applicationem tuam mollius conformare ac clientelas inter diversas ViewModels communicare sinit.
Si parente-paris relatio inter duas ViewModels vel in altiori gradu sunt ViewModel, data vel mandata transire potes per parentem vel communicatum ViewModel. Hoc fere involvit definitivas eventus seu mandata in parente ViewModel et excitat eventa vel mandata in puero ViewModel.
In nonnullis casibus uti potes coniuncta proprietate ad informationem inter UI elementa, sed plerumque hoc adhibetur ad communicationem directam inter UI elementa, non communicationem inter ViewModels. Attamen, indirecte communicationem inter ViewModels applicando proprietatibus afficere potes, exempli gratia, excitato mandatorum in ViewModel.
Exemplum est hoc utens PrismateEventAggregator
Simplex exemplum communicationis inter diversas ViewModels:
- // 定义事件
- public class MyEvent : PubSubEvent<string>
- {
- }
-
- // 发布事件
- eventAggregator.GetEvent<MyEvent>().Publish("Hello, World!");
-
- // 订阅事件
- eventAggregator.GetEvent<MyEvent>().Subscribe(message =>
- {
- // 处理消息
- Console.WriteLine(message);
- });