informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Di WPF,DataContext
Biasanya digunakan untuk membuat pengikatan data antara elemen UI (seperti kontrol) dan logika backendnya (seperti ViewModels).Ketika Anda perlu menggunakan yang berbedaDataContext
Saat berkomunikasi antara ViewModel yang berbeda, ini biasanya berarti Anda perlu meneruskan informasi antara ViewModel atau lapisan data yang berbeda.
WPF sendiri tidak secara langsung menyediakan lintas-DataContext
Mekanisme komunikasi, tetapi Anda dapat mencapainya dengan cara berikut:
Gunakan mekanisme penyampaian pesan seperti di perpustakaan PrismEventAggregator
Atau yang dilengkapi dengan .NETEventAggregator
Implementasi, sepertiMicrosoft.Extensions.Hosting.Internal.IHostedService
Tidak seperti peristiwa khusus (meskipun peristiwa khusus ini terutama digunakan untuk komunikasi antar layanan), peristiwa dan pesan dapat diteruskan antar komponen atau ViewModel yang berbeda. Hal ini memungkinkan Anda memublikasikan peristiwa di satu ViewModel dan berlangganan peristiwa di ViewModel lain sebagai respons terhadap peristiwa tersebut.
Buat kelas layanan bersama yang berisiDataContext
Data atau logika bersama. Anda kemudian dapat memasukkan layanan ini ke dalam ViewModel yang membutuhkannya. Dengan cara ini, ViewModel yang berbeda dapat berkomunikasi secara tidak langsung melalui layanan bersama.
Gunakan kerangka kerja injeksi ketergantungan (seperti wadah DI bawaan .NET Core, Autofac, Ninject, dll.) untuk mengelola siklus hidup dan ketergantungan ViewModel Anda dan kelas lainnya. Hal ini membantu Anda membangun dan mengonfigurasi aplikasi dengan lebih fleksibel dan memungkinkan Anda berbagi dependensi antar ViewModel yang berbeda.
Jika ada hubungan induk-anak antara dua ViewModel atau keduanya berbagi ViewModel tingkat yang lebih tinggi, Anda dapat meneruskan data atau perintah melalui ViewModel induk atau bersama. Hal ini biasanya melibatkan pendefinisian peristiwa atau perintah di ViewModel induk dan memicu peristiwa atau perintah tersebut di ViewModel anak.
Dalam beberapa kasus, Anda dapat menggunakan properti terlampir untuk meneruskan informasi antar elemen UI, namun properti ini umumnya digunakan untuk komunikasi langsung antar elemen UI, bukan komunikasi antar ViewModel. Namun, Anda dapat secara tidak langsung memengaruhi komunikasi antar ViewModel dengan melampirkan properti, misalnya dengan memicu perintah di ViewModel.
Berikut ini adalah contoh penggunaan PrismEventAggregator
Contoh sederhana komunikasi antara ViewModels yang berbeda:
- // 定义事件
- public class MyEvent : PubSubEvent<string>
- {
- }
-
- // 发布事件
- eventAggregator.GetEvent<MyEvent>().Publish("Hello, World!");
-
- // 订阅事件
- eventAggregator.GetEvent<MyEvent>().Subscribe(message =>
- {
- // 处理消息
- Console.WriteLine(message);
- });