プライベートな連絡先の最初の情報
送料メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
WPFでは、DataContext
通常、UI 要素 (コントロールなど) とそのバックエンド ロジック (ViewModel など) の間のデータ バインディングを確立するために使用されます。別のものを使用する必要がある場合DataContext
異なる ViewModel 間で通信する場合、これは通常、異なる ViewModel またはデータ レイヤー間で情報を渡す必要があることを意味します。
WPF 自体はクロス機能を直接提供しません。DataContext
通信メカニズムですが、次の方法で実現できます。
Prism ライブラリなどのメッセージ受け渡しメカニズムを使用するEventAggregator
または .NET に付属のものEventAggregator
実装などMicrosoft.Extensions.Hosting.Internal.IHostedService
カスタム イベント (後者は主にサービス間の通信に使用されますが) とは異なり、イベントとメッセージは異なるコンポーネントまたは ViewModel 間で受け渡すことができます。これにより、ある ViewModel でイベントを発行し、それに応答して別の ViewModel でイベントをサブスクライブすることができます。
を含む共有サービス クラスを作成します。DataContext
共有データまたはロジック。その後、このサービスを必要とする ViewModel にこのサービスを挿入できます。このようにして、異なる ViewModel は共有サービスを通じて間接的に通信できます。
依存関係注入フレームワーク (.NET Core の組み込み DI コンテナー、Autofac、Ninject など) を使用して、ViewModel やその他のクラスのライフ サイクルと依存関係を管理します。これにより、アプリケーションをより柔軟に構築および構成できるようになり、異なる ViewModel 間で依存関係を共有できるようになります。
2 つの ViewModel の間に親子関係がある場合、または上位レベルの ViewModel を共有している場合は、親または共有 ViewModel を介してデータまたはコマンドを渡すことができます。これには通常、親 ViewModel でイベントまたはコマンドを定義し、子 ViewModel でそれらのイベントまたはコマンドをトリガーすることが含まれます。
場合によっては、添付プロパティを使用して UI 要素間で情報を渡すことができますが、これは通常、ViewModel 間の通信ではなく、UI 要素間の直接通信に使用されます。ただし、プロパティをアタッチすることによって、たとえば ViewModel でコマンドをトリガーすることによって、ViewModel 間の通信に間接的に影響を与えることができます。
以下はPrismを使用した例ですEventAggregator
異なる ViewModel 間の通信の簡単な例:
- // 定义事件
- public class MyEvent : PubSubEvent<string>
- {
- }
-
- // 发布事件
- eventAggregator.GetEvent<MyEvent>().Publish("Hello, World!");
-
- // 订阅事件
- eventAggregator.GetEvent<MyEvent>().Subscribe(message =>
- {
- // 处理消息
- Console.WriteLine(message);
- });