Enterprise 예제에서 MainWindow와 MainWindowViewModel은 어떻게 연결되며, ViewModel은 MainWindowEvent를 어떻게 참조하나요?
요청 판정 Supported개정 1 / 1조회 933초 동안 분석2026-07-20 23:32
직접 답변
Enterprise 예제에서는 `App.Customization.Sample.cs`가 DI 컨테이너에서 `MainWindowViewModel`을 resolve한 뒤, 새 `MainWindow`의 `DataContext`에 직접 대입하여 둘을 연결합니다. ViewModel은 `MainWindowEvent` 형식의 private 필드 `_event`를 선언하고 `[DreamineEvent]`를 붙여 참조합니다.
/// <para>Use this hook only when you want to create and show the main window manually. If App.xaml already defines StartupUri, leave this hook unused.</para>
/// \endif
/// </remarks>
static partial void ShowMainWindow()
{
var vm = DMContainer.Resolve<MainWindowViewModel>();
var view = new MainWindow
{
DataContext = vm
};
view.Loaded += (s, e) =>
{
ViewModel이 DreamineEvent 특성이 붙은 MainWindowEvent private 필드를 선언합니다.
[DreamineEvent] private MainWindowEvent _event;
/// \if EN
/// <para>Stores the event value.</para>
/// \endif
/// </summary>
[DreamineEvent]
private MainWindowEvent _event;
/// <summary>
/// \if KO
/// <para>Title 값을 가져옵니다.</para>
/// \endif
/// \if EN
/// <para>Gets the title value.</para>
namespace SampleEnterprise.Events; public class MainWindowEvent
using Dreamine.MVVM.Interfaces.Navigation;
using System.Windows;
using Dreamine.MVVM.Core;
namespace SampleEnterprise.Events
{
/// <summary>
/// \if KO
/// <para>Main Window Event 기능과 관련 상태를 캡슐화합니다.</para>
/// \endif
/// \if EN
/// <para>Encapsulates main window event functionality and related state.</para>
/// \endif
/// </summary>
public class MainWindowEvent
{
/// <summary>
/// \if KO
/// <para>view Manager 값을 보관합니다.</para>
/// \endif
/// \if EN
/// <para>Stores the view manager value.</para>
Enterprise 프로젝트의 MainWindowViewModel CLR 형식을 선언합니다.
public partial class MainWindowViewModel : ViewModelBase
/// \endif
/// \if EN
/// <para>Encapsulates main window view model functionality and related state.</para>
/// \endif
/// </summary>
public partial class MainWindowViewModel : ViewModelBase
{
/// <summary>
/// \if KO
/// <para>model 값을 보관합니다.</para>
/// \endif
/// \if EN
/// <para>Stores the model value.</para>
구현 위치는 `SampleEnterprise/App.Customization.Sample.cs`의 `ShowMainWindow()`입니다.
```csharp
var vm = DMContainer.Resolve<MainWindowViewModel>();
var view = new MainWindow
{
DataContext = vm
};
```
즉, 연결 흐름은 `DMContainer.Resolve<MainWindowViewModel>() → MainWindow 생성 → DataContext = vm`입니다. XAML의 암시적 연결이 아니라 애플리케이션 시작 사용자 지정 코드에서 명시적으로 연결합니다.
확인 가능한 범위와 배치 지침
제공된 소스는 `[DreamineEvent]` 필드 선언까지는 증명하지만, 특성이 생성하는 멤버 이름이나 `_event` 값의 생성·주입 시점은 보여주지 않습니다. 저장소 추가 검색도 실행 환경 오류로 수행되지 않아 그 동작은 확정할 수 없습니다.
이 예제 구조를 따를 때 창–ViewModel 조립은 `App.Customization.Sample.cs`, 화면 상태와 호출 진입점은 `MainWindowViewModel`, 창 관련 동작은 별도 `SampleEnterprise.Events/MainWindowEvent.cs`에 둡니다. 확인된 코드상 `MainWindow` 코드비하인드가 ViewModel을 직접 생성할 필요는 없습니다.
확인되지 않은 내용
[DreamineEvent]가 필드에 값을 주입하는 구체적인 방식과 시점
[DreamineEvent] 소스 생성기가 별도 공개 멤버를 생성하는지 및 그 멤버 이름
기술 세부정보
정규화된 질문: Enterprise 예제에서 MainWindow와 MainWindowViewModel은 어떻게 연결되며, ViewModel은 MainWindowEvent를 어떻게 참조하나요?
Source · Enterprise MainWindow 시작 구성
source-1 · 직접 근거 · confidence 1.00Source · Enterprise MainWindowViewModel 선언
source-2 · 직접 근거 · confidence 1.00Source · Enterprise MainWindowEvent 필드
source-3 · 직접 근거 · confidence 1.00Source · Enterprise MainWindowEvent 형식
source-4 · 직접 근거 · confidence 1.00