내 연락처 정보
우편메소피아@프로톤메일.com
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 간에 종속성을 공유할 수 있습니다.
두 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);
- });