πŸš€ LazyVoom 라이브러리 λ§Œλ“€μ–΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, μ΄κ΄‘μ„μž…λ‹ˆλ‹€.

WPFλ‚˜ XAML 계열 ν”„λ ˆμž„μ›Œν¬μ—μ„œ MVVM νŒ¨ν„΄μ„ μ μš©ν•  λ•Œ κ°€μž₯ 많이 μ–ΈκΈ‰λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ Prism이죠.

μ €λŠ” Prism을 μ“°λ©΄μ„œλ„ λ§ˆμŒμ— λ“€μ—ˆλ˜ Auto ViewModel Locator κΈ°λŠ₯만 λ”°λ‘œ λΉΌμ„œ κ°€λ³κ²Œ μ“Έ 수 μžˆλ„λ‘ LazyVoomμ΄λΌλŠ” 라이브러리λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

  • Prism처럼 전체 ν”„λ ˆμž„μ›Œν¬λ₯Ό λ„μž…ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.

  • μ›ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬ ꡬ쑰 μ•ˆμ—μ„œ, 일뢀 κΈ°λŠ₯만 κ°€μ Έλ‹€ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λͺ©μ μ€ ν”„λ ˆμž„μ›Œν¬κ°€ λ˜λŠ” 것이 μ•„λ‹ˆλΌ, μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ˜ ν”„λ ˆμž„μ›Œν¬ μ•ˆμ— λ…Ήμ•„λ“œλŠ” κ²ƒμž…λ‹ˆλ‹€.

:backhand_index_pointing_right: GitHub: LazyVoom

ν˜Ήμ‹œ MVVM을 μ μš©ν•˜λ©΄μ„œ "κ°€λ³κ²Œ ViewModel μ—°κ²°λ§Œ μžλ™ν™”ν•˜κ³  μ‹Άλ‹€"λŠ” 생각이 μžˆλ‹€λ©΄ ν•œ 번 μ°Έκ³ ν•΄ 보셔도 μ’‹κ² μŠ΅λ‹ˆλ‹€.

WPF

MAUI

WinUI3

Avalonia

OpenSilver

ps. μƒ˜ν”Œ μ˜ˆμ œκ°€ μžˆκΈ΄ν•©λ‹ˆλ‹€λ§Œ, μ μš©ν•˜μ‹œλŠ”λ° ν•„μš”ν•˜μ‹  뢀뢄이 μžˆλ‹€λ©΄ μ–Έμ œλ“  λŒ“κΈ€μ΄λ‚˜ μͺ½μ§€ λ‚¨κ²¨μ£Όμ„Έμš”!

10개의 μ’‹μ•„μš”

일단 μ„€λͺ… 만으둜 합격 γ…Žγ…Žγ…Ž

함 잘 μ¨λ³΄κ² μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

μ§ˆλ¬Έμš”..
View-ViewModel μ—°κ²° 만 ν•˜μ‹ λ‹€ ν•˜μ…¨λŠ”λ°
ν˜Ήμ‹œ VS UI λ””μžμΈλ‹¨μ—μ„œ μ»¨νŠΈλ‘€μ— 데이터 바인딩 μž…νžμˆ˜ μžˆλ‚˜μš” ?

질문 λ‘λ²ˆμ¨°μš”
DI 둜 뷰와 λ·°λͺ¨λΈ λ§΅ν•‘ ν•œκ±°λŠ” 제거 ν•˜λŠ” κ±΄κ°€μš”? μ•„λ‹˜ μΆ”κ°€λ‘œ Voom.Instance ν•˜λŠ” κ±΄κ°€μš” ?

1개의 μ’‹μ•„μš”

κ΄€μ‹¬κ°€μ Έμ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ :slight_smile:

  • 컨트둀 객체가 생성됨과 λ™μ‹œμ— 바인딩을 μ²˜λ¦¬ν•΄μ£ΌλŠ” 라이브러리 이기 λ•Œλ¬Έμ— VS UI λ””μžμΈλ‹¨κ³ΌλŠ” λ³„κ°œμ˜ μ˜μ—­μž…λ‹ˆλ‹€..!
  • λ„€ 제거 ν•˜κ³  μ•„λž˜μ™€ 같이 λ”°λΌμ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

λ³€κ²½ μ „

public class MainWindow : Window
{
  public MainWindow(MainWindowViewModel vm)
  {
     this.DataContext= vm;
  }
}

λ³€κ²½ ν›„

  1. μƒμ„±μžμ—μ„œ 직접적인 λ°μ΄νƒ€μ»¨ν…μŠ€νŠΈλŠ” μ§€μ›Œμ€λ‹ˆλ‹€.
// MainWindow.cs
public class MainWindow : Window
{
  public MainWindow(){
  }
}
  1. Voom.InstanceλŠ” IoC μ»¨ν…Œμ΄λ„ˆμ— λ“±λ‘λœ ViewModel듀을 κ°€μ Έμ˜€κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    λ³„λ„μ˜ WithMapping 처리λ₯Ό ν•˜μ§€ μ•Šμ€ μ΄μœ λŠ” κΈ°λ³Έ View-ViewModel 넀이밍 μ»¨λ²€μ…˜μ— 따라 μžλ™μœΌλ‘œ vmType이 κ²°μ •λ©λ‹ˆλ‹€. 이후 IoC providerμ—μ„œ ν•΄λ‹Ή Type을 μ‘°νšŒν•˜μ—¬ ViewModel μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. (κΈ°λ³Έ 넀이밍 μ»¨λ²€μ…˜μ— λ§žμ§€ μ•Šμ€ κ²½μš°μ—” WithMapping을 톡해 λ³„λ„λ‘œ μ„€μ •ν•΄μ£Όμ…”μ•Όν•©λ‹ˆλ‹€.)

// App.xaml.cs
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
       base.OnStartup (e);
       var services = new ServiceCollection ();
       
       services.AddSingleton<MainWindow>();
       services.AddSingleton<MainWIndowViewModel>();

       IServiceProvider provider = services.BuildServiceProvider ();
       Voom.Instance
           .WithContainerResolver ((vmType) =>
           {
               return provider.GetService (vmType) ?? 
                      ActivatorUtilities.CreateInstance(provider, vmType);
           });
    }
}
  1. λ§ˆμ§€λ§‰ ν•˜μ΄λΌμ΄νŠΈ! xaml에 μ•„λž˜ 두 쀄을 μΆ”κ°€ν•΄μ€λ‹ˆλ‹€.
  xmlns:voom="http://lazyVoom.dev/voom"
  voom:ViewModelLocator.AutoWireViewModel="True"

μ’€ 더 이해λ₯Ό λ„μš°κ³ μž μƒ˜ν”Œμ„ λ‚¨κ²¨λ“œλ¦½λ‹ˆλ‹€. ServiceProvider 예제

1개의 μ’‹μ•„μš”

첫번째 질문이 κΈ°μ‘΄ 은 UI 컨트둀 속성 μ°½ μ—μ„œ Text 에 값을 μž…λ ₯ ν•˜λ©΄ λ””μžμΈμ‹œ λ³΄μ΄μ§€λ‚˜μš”
κ·ΈλŸ°κ²ƒμ΄ WPF λ””μžμΈλ‹¨ μ—μ„œλ„ λ˜λŠ”μ§€

ν˜Ήμ€

λ°μ΄ν„°μ»¨ν…μŠ€νŠΈ 바인딩 ν›„ μ‹€ν–‰ ν•˜μ—¬ 첫 ν™”λ©΄ 뜨면 μ΄ˆκΈ°κ°’μ΄ μ„€μ • λ˜λŠ”μ§€ (λ·°λͺ¨λΈ μƒμ„±μž κ°’ μ…‹νŒ…)

μ•„ ν•˜λ‹€ λ³΄λ‹ˆ 첫번째 질문이 두가지가 λ˜λ²„λ Έλ„€μš”

λ‘λ²ˆμ§Έ μ§ˆλ¬Έμ— λŒ€ν•œ μΉœμ ˆν•œ μ„€λͺ… 감사 λ“œλ¦½λ‹ˆλ‹€.
μƒ˜ν”Œλ„ μž˜λ³΄κ² μŠ΅λ‹ˆλ‹€.

1개의 μ’‹μ•„μš”

λ””μžμΈλ‹¨ μ΄λΌλŠ”κ²Œβ€¦ λ””λ²„κΉ…ν•˜μ§€μ•Šκ³  아무렇지 μ•Šμ€ μƒνƒœλ₯Ό λ§μ”€ν•˜μ‹œλŠ”κ±°μ£ ? :sweat_smile:

λ””μžμΈνƒ€μž„ μžμ²΄λŠ” 객체λ₯Ό μƒμ„±ν•œ μ•„λ‹ˆκΈ° 떄문에 λ³Όμˆ˜μ—†μŠ΅λ‹ˆλ‹€.

d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=True}"

이거 κ΄€λ ¨λœκ±Έ μ°Ύμ•„λ³΄μ‹œλŠ”κ²Œ 쒋을 것 κ°™μ•„μš”.

μ‹±κΈ€ν†€μœΌλ‘œ μƒμ„±λœ λ·°λͺ¨λΈμ„ λ§μ”€ν•˜μ‹œλŠ”κ±΄μ§€β€¦μ’€ 더 상황을 ꡬ체적으둜 λ§μ”€ν•΄μ£Όμ„Έμš”!

λ„€ 객체 생성 μ „ 이라 μ €λŸ°κ±° λ°–μ—” 없을듯 ν•˜λ„€μš”

μ‹±κΈ€ν†€μœΌλ‘œ μƒμ„±λœ λ·°λͺ¨λΈ 의 μƒμ„±μž μ—μ„œ μ»¨νŠΈλ‘€κ°’ 을 μ„€μ • ν•œ κ²½μš°β€¦ 음 이것은 될거 κ°™λ„€μš”.

첫번째 μ§ˆλ¬Έμ€ μŠ€ν‚΅ ν•˜μ…”λ„ 될것 κ°™μŠ΅λ‹ˆλ‹€.

μ‹ κ²½ 써 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

남은 μ—°νœ΄ 행볡 ν•˜κ²Œ 마무리 ν•˜μ‹œκΈ°λ₯Ό..

1개의 μ’‹μ•„μš”