Technology sharing

Communicatio inter diversas DataContexts in wpf

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 diversumDataContextCum communicare inter diversas ViewModels, hoc plerumque significat vos postulo ut informationes transgrediaris inter ViewModels vel notitias diversas stratis.

WPF ipsum non directe praebet cross-DataContextMechanismum communicativum, sed hoc modo consequi potes:

Nuntius transitum mechanism 1. (ut EventAggregator)

Nuntium transiens mechanismum utere ut in Bibliotheca PrismatisEventAggregatorAut qui venit cum .NETEventAggregatorExsecutio, 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.

2. Shared officia (Service)

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.

3. Dependency Iniectio

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.

4. parens vel participatur ViewModel

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.

5. adnexa Properties

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: Using EventAggregator

Exemplum est hoc utens PrismateEventAggregatorSimplex exemplum communicationis inter diversas ViewModels:

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