Dreamine.MVVM.Wpf 1.0.3
Dreamine.MVVM.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.MVVM.Wpf.ViewManager 클래스 참조sealed

더 자세히 ...

Dreamine.MVVM.Wpf.ViewManager에 대한 상속 다이어그램 :
Dreamine.MVVM.Wpf.ViewManager에 대한 협력 다이어그램:

Public 멤버 함수

 ViewManager (IServiceResolver resolver, double fallbackWindowWidth=800, double fallbackWindowHeight=600)
 ViewManager ()
void RegisterDisplayStrategy (IViewDisplayStrategy strategy)
void Show< TViewModel > ()
void Show (Type viewModelType)
void Navigate (object viewModel)

Private 멤버 함수

void DisplayResolvedView (object? view, object viewModel, Type viewModelType, bool useRegionNavigator)
void ShowWindow (Window window, object viewModel, Type viewModelType)
void ShowUserControl (UserControl userControl, object viewModel, bool useRegionNavigator)
void ShowPage (Page page, object viewModel, bool useRegionNavigator)
T? TryResolve< T > ()

정적 Private 멤버 함수

static void ActivateExistingWindow (string windowKey)
static string GetViewKey (Type type)

Private 속성

readonly IServiceResolver _resolver
readonly List< IViewDisplayStrategy > _customStrategies = new()
readonly double _fallbackWindowWidth
readonly double _fallbackWindowHeight

상세한 설명

View Manager 기능과 관련 상태를 캡슐화합니다.

ViewManager.cs 파일의 22 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ ViewManager() [1/2]

Dreamine.MVVM.Wpf.ViewManager.ViewManager ( IServiceResolver resolver,
double fallbackWindowWidth = 800,
double fallbackWindowHeight = 600 )
inline

지정한 설정으로 ViewManager 클래스의 새 인스턴스를 초기화합니다.

매개변수
resolverresolver에 사용할 IServiceResolver 값입니다.
fallbackWindowWidthfallback Window Width에 사용할 double 값입니다.
fallbackWindowHeightfallback Window Height에 사용할 double 값입니다.
예외
ArgumentNullException필수 입력 인자 중 하나가 null인 경우 발생합니다.

ViewManager.cs 파일의 101 번째 라인에서 정의되었습니다.

102 {
103 _resolver = resolver ?? throw new ArgumentNullException(nameof(resolver));
104 _fallbackWindowWidth = fallbackWindowWidth > 0 ? fallbackWindowWidth : 800;
105 _fallbackWindowHeight = fallbackWindowHeight > 0 ? fallbackWindowHeight : 600;
106 }

다음을 참조함 : _fallbackWindowHeight, _fallbackWindowWidth, _resolver.

다음에 의해서 참조됨 : ShowPage(), ShowUserControl().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ViewManager() [2/2]

Dreamine.MVVM.Wpf.ViewManager.ViewManager ( )
inline

지정한 설정으로 ViewManager 클래스의 새 인스턴스를 초기화합니다.

ViewManager.cs 파일의 116 번째 라인에서 정의되었습니다.

116 : this(DMContainer.GetResolver())
117 {
118 }

멤버 함수 문서화

◆ ActivateExistingWindow()

void Dreamine.MVVM.Wpf.ViewManager.ActivateExistingWindow ( string windowKey)
inlinestaticprivate

Activate Existing Window 작업을 수행합니다.

매개변수
windowKeywindow Key에 사용할 string 값입니다.

ViewManager.cs 파일의 482 번째 라인에서 정의되었습니다.

483 {
484 foreach (Window window in Application.Current.Windows)
485 {
486 if (GetViewKey(window.GetType()) == windowKey)
487 {
488 window.Activate();
489 return;
490 }
491
492 if (window.DataContext is not null &&
493 GetViewKey(window.DataContext.GetType()) == windowKey)
494 {
495 window.Activate();
496 return;
497 }
498 }
499 }

다음을 참조함 : GetViewKey().

다음에 의해서 참조됨 : ShowWindow().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DisplayResolvedView()

void Dreamine.MVVM.Wpf.ViewManager.DisplayResolvedView ( object? view,
object viewModel,
Type viewModelType,
bool useRegionNavigator )
inlineprivate

Display Resolved View 작업을 수행합니다.

매개변수
viewview에 사용할 object 값입니다.
viewModelview Model에 사용할 object 값입니다.
viewModelTypeview Model Type에 사용할 Type 값입니다.
useRegionNavigatoruse Region Navigator에 사용할 bool 값입니다.

ViewManager.cs 파일의 253 번째 라인에서 정의되었습니다.

258 {
259 if (view is null)
260 {
261 Debug.WriteLine(
262 $"[ViewManager] No view found for {viewModelType.FullName}. " +
263 "Ensure the view is registered via ViewModelLocator.Register<TView, TViewModel>().");
264 return;
265 }
266
267 // Custom strategies take precedence — checked before built-in WPF types.
268 foreach (var strategy in _customStrategies)
269 {
270 if (strategy.CanHandle(view))
271 {
272 strategy.Display(view, viewModel, viewModelType, useRegionNavigator);
273 return;
274 }
275 }
276
277 // Built-in WPF type handling.
278 switch (view)
279 {
280 case Window window:
281 ShowWindow(window, viewModel, viewModelType);
282 break;
283
284 case UserControl userControl:
285 ShowUserControl(userControl, viewModel, useRegionNavigator);
286 break;
287
288 case Page page:
289 ShowPage(page, viewModel, useRegionNavigator);
290 break;
291
292 default:
293 Debug.WriteLine(
294 $"[ViewManager] No display strategy found for view type {view.GetType().FullName}. " +
295 "Register a custom IViewDisplayStrategy via RegisterDisplayStrategy().");
296 break;
297 }
298 }

다음을 참조함 : _customStrategies, ShowPage(), ShowUserControl(), ShowWindow().

다음에 의해서 참조됨 : Navigate(), Show().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetViewKey()

string Dreamine.MVVM.Wpf.ViewManager.GetViewKey ( Type type)
inlinestaticprivate

View Key 값을 가져옵니다.

매개변수
typetype에 사용할 Type 값입니다.
반환값
Get View Key 작업에서 생성한 string 결과입니다.

ViewManager.cs 파일의 525 번째 라인에서 정의되었습니다.

526 {
527 string name = type.Name;
528
529 if (name.EndsWith("ViewModel", StringComparison.Ordinal))
530 return name[..^"ViewModel".Length];
531
532 if (name.EndsWith("Window", StringComparison.Ordinal))
533 return name[..^"Window".Length];
534
535 if (name.EndsWith("View", StringComparison.Ordinal))
536 return name[..^"View".Length];
537
538 if (name.EndsWith("Page", StringComparison.Ordinal))
539 return name[..^"Page".Length];
540
541 return name;
542 }

다음에 의해서 참조됨 : ActivateExistingWindow(), ShowWindow().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Navigate()

void Dreamine.MVVM.Wpf.ViewManager.Navigate ( object viewModel)
inline

Navigate 작업을 수행합니다.

매개변수
viewModelview Model에 사용할 object 값입니다.

ViewManager.cs 파일의 204 번째 라인에서 정의되었습니다.

205 {
206 ArgumentNullException.ThrowIfNull(viewModel);
207
208 Type viewModelType = viewModel.GetType();
209 object? view = ViewModelLocator.ResolveView(viewModelType);
210 DisplayResolvedView(view, viewModel, viewModelType, useRegionNavigator: false);
211 }

다음을 참조함 : DisplayResolvedView().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterDisplayStrategy()

void Dreamine.MVVM.Wpf.ViewManager.RegisterDisplayStrategy ( IViewDisplayStrategy strategy)
inline

Register Display Strategy 작업을 수행합니다.

매개변수
strategystrategy에 사용할 IViewDisplayStrategy 값입니다.

ViewManager.cs 파일의 136 번째 라인에서 정의되었습니다.

137 {
138 ArgumentNullException.ThrowIfNull(strategy);
139 _customStrategies.Add(strategy);
140 }

다음을 참조함 : _customStrategies.

◆ Show()

void Dreamine.MVVM.Wpf.ViewManager.Show ( Type viewModelType)
inline

Show 작업을 수행합니다.

매개변수
viewModelTypeview Model Type에 사용할 Type 값입니다.

ViewManager.cs 파일의 179 번째 라인에서 정의되었습니다.

180 {
181 ArgumentNullException.ThrowIfNull(viewModelType);
182
183 object viewModel = _resolver.Resolve(viewModelType);
184 object? view = ViewModelLocator.ResolveView(viewModelType);
185 DisplayResolvedView(view, viewModel, viewModelType, useRegionNavigator: true);
186 }

다음을 참조함 : _resolver, DisplayResolvedView().

다음에 의해서 참조됨 : Show< TViewModel >().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Show< TViewModel >()

void Dreamine.MVVM.Wpf.ViewManager.Show< TViewModel > ( )
inline

Show 작업을 수행합니다.

템플릿 파라메터
TViewModelTViewModel 형식 매개변수입니다.
타입 한정자들
TViewModel :class 

ViewManager.cs 파일의 158 번째 라인에서 정의되었습니다.

158 : class
159 {
160 Show(typeof(TViewModel));
161 }

다음을 참조함 : Show().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ShowPage()

void Dreamine.MVVM.Wpf.ViewManager.ShowPage ( Page page,
object viewModel,
bool useRegionNavigator )
inlineprivate

Show Page 작업을 수행합니다.

매개변수
pagepage에 사용할 Page 값입니다.
viewModelview Model에 사용할 object 값입니다.
useRegionNavigatoruse Region Navigator에 사용할 bool 값입니다.

ViewManager.cs 파일의 447 번째 라인에서 정의되었습니다.

448 {
449 page.DataContext = viewModel;
450
451 INavigator? navigator = useRegionNavigator ? TryResolve<INavigator>() : null;
452 if (navigator is not null && navigator is not ViewManager)
453 {
454 navigator.Navigate(viewModel);
455 return;
456 }
457
458 new Window
459 {
460 Content = page,
461 Width = _fallbackWindowWidth,
462 Height = _fallbackWindowHeight
463 }.Show();
464 }

다음을 참조함 : _fallbackWindowHeight, _fallbackWindowWidth, ViewManager().

다음에 의해서 참조됨 : DisplayResolvedView().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShowUserControl()

void Dreamine.MVVM.Wpf.ViewManager.ShowUserControl ( UserControl userControl,
object viewModel,
bool useRegionNavigator )
inlineprivate

Show User Control 작업을 수행합니다.

매개변수
userControluser Control에 사용할 UserControl 값입니다.
viewModelview Model에 사용할 object 값입니다.
useRegionNavigatoruse Region Navigator에 사용할 bool 값입니다.

ViewManager.cs 파일의 396 번째 라인에서 정의되었습니다.

397 {
398 userControl.DataContext = viewModel;
399
400 INavigator? navigator = useRegionNavigator ? TryResolve<INavigator>() : null;
401 if (navigator is not null && navigator is not ViewManager)
402 {
403 navigator.Navigate(viewModel);
404 return;
405 }
406
407 new Window
408 {
409 Content = userControl,
410 Width = _fallbackWindowWidth,
411 Height = _fallbackWindowHeight
412 }.Show();
413 }

다음을 참조함 : _fallbackWindowHeight, _fallbackWindowWidth, ViewManager().

다음에 의해서 참조됨 : DisplayResolvedView().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShowWindow()

void Dreamine.MVVM.Wpf.ViewManager.ShowWindow ( Window window,
object viewModel,
Type viewModelType )
inlineprivate

Show Window 작업을 수행합니다.

매개변수
windowwindow에 사용할 Window 값입니다.
viewModelview Model에 사용할 object 값입니다.
viewModelTypeview Model Type에 사용할 Type 값입니다.

ViewManager.cs 파일의 332 번째 라인에서 정의되었습니다.

333 {
334 string windowKey = GetViewKey(viewModelType);
335 IWindowStateService? windowStateService = TryResolve<IWindowStateService>();
336
337 if (windowStateService?.IsOpen(windowKey) == true)
338 {
339 ActivateExistingWindow(windowKey);
340 return;
341 }
342
343 window.DataContext = viewModel;
344
345 // 메인 윈도우를 Owner로 지정합니다.
346 // WPF는 Owner가 닫힐 때 소유된 모든 창을 자동으로 닫아주므로
347 // 메인 창 종료 시 팝업이 남아있는 문제를 방지합니다.
348 var mainWindow = Application.Current?.MainWindow;
349 if (mainWindow is not null && mainWindow != window && mainWindow.IsLoaded)
350 {
351 window.Owner = mainWindow;
352 }
353
354 windowStateService?.MarkOpened(windowKey);
355
356 window.Closed += (_, _) =>
357 {
358 windowStateService?.MarkClosed(windowKey);
359 };
360
361 window.Show();
362 }

다음을 참조함 : ActivateExistingWindow(), GetViewKey().

다음에 의해서 참조됨 : DisplayResolvedView().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ TryResolve< T >()

T? Dreamine.MVVM.Wpf.ViewManager.TryResolve< T > ( )
inlineprivate

Resolve 작업을 시도하고 성공 여부를 반환합니다.

템플릿 파라메터
TT 형식 매개변수입니다.
반환값
Try Resolve 작업에서 생성한 T 결과입니다.
타입 한정자들
T :class 

ViewManager.cs 파일의 568 번째 라인에서 정의되었습니다.

568 : class
569 {
570 _resolver.TryResolve<T>(out var result);
571 return result;
572 }

다음을 참조함 : _resolver.

멤버 데이터 문서화

◆ _customStrategies

readonly List<IViewDisplayStrategy> Dreamine.MVVM.Wpf.ViewManager._customStrategies = new()
private

custom Strategies 값을 보관합니다.

ViewManager.cs 파일의 41 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DisplayResolvedView(), RegisterDisplayStrategy().

◆ _fallbackWindowHeight

readonly double Dreamine.MVVM.Wpf.ViewManager._fallbackWindowHeight
private

fallback Window Height 값을 보관합니다.

ViewManager.cs 파일의 59 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ShowPage(), ShowUserControl(), ViewManager().

◆ _fallbackWindowWidth

readonly double Dreamine.MVVM.Wpf.ViewManager._fallbackWindowWidth
private

fallback Window Width 값을 보관합니다.

ViewManager.cs 파일의 50 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ShowPage(), ShowUserControl(), ViewManager().

◆ _resolver

readonly IServiceResolver Dreamine.MVVM.Wpf.ViewManager._resolver
private

resolver 값을 보관합니다.

ViewManager.cs 파일의 32 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : Show(), TryResolve< T >(), ViewManager().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: