μλ
νμΈμ, μ΄κ΄μμ
λλ€.
WPFλ XAML κ³μ΄ νλ μμν¬μμ MVVM ν¨ν΄μ μ μ©ν λ κ°μ₯ λ§μ΄ μΈκΈλλ λΌμ΄λΈλ¬λ¦¬κ° Prismμ΄μ£ .
μ λ Prismμ μ°λ©΄μλ λ§μμ λ€μλ Auto ViewModel Locator κΈ°λ₯λ§ λ°λ‘ λΉΌμ κ°λ³κ² μΈ μ μλλ‘ LazyVoomμ΄λΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§λ€μμ΅λλ€.
-
Prismμ²λΌ μ 체 νλ μμν¬λ₯Ό λμ
νμ§ μμλ λ©λλ€.
-
μνλ νλ μμν¬ κ΅¬μ‘° μμμ, μΌλΆ κΈ°λ₯λ§ κ°μ Έλ€ μΈ μ μμ΅λλ€.
-
λͺ©μ μ νλ μμν¬κ° λλ κ²μ΄ μλλΌ, μ¬μ©νλ μ¬λμ νλ μμν¬ μμ λ
Ήμλλ κ²μ
λλ€.
GitHub: LazyVoom
νΉμ MVVMμ μ μ©νλ©΄μ "κ°λ³κ² ViewModel μ°κ²°λ§ μλννκ³ μΆλ€"λ μκ°μ΄ μλ€λ©΄ ν λ² μ°Έκ³ ν΄ λ³΄μ
λ μ’κ² μ΅λλ€.
WPF
MAUI
WinUI3
Avalonia
OpenSilver
ps. μν μμ κ° μκΈ΄ν©λλ€λ§, μ μ©νμλλ° νμνμ λΆλΆμ΄ μλ€λ©΄ μΈμ λ λκΈμ΄λ μͺ½μ§ λ¨κ²¨μ£ΌμΈμ!
10κ°μ μ’μμ
μΌλ¨ μ€λͺ
λ§μΌλ‘ ν©κ²© γ
γ
γ
ν¨ μ μ¨λ³΄κ² μ΅λλ€. κ°μ¬ν©λλ€.
μ§λ¬Έμ..
View-ViewModel μ°κ²° λ§ νμ λ€ νμ
¨λλ°
νΉμ VS UI λμμΈλ¨μμ 컨νΈλ‘€μ λ°μ΄ν° λ°μΈλ© μ
νμ μλμ ?
μ§λ¬Έ λλ²μ¨°μ
DI λ‘ λ·°μ λ·°λͺ¨λΈ λ§΅ν νκ±°λ μ κ±° νλ 건κ°μ? μλ μΆκ°λ‘ Voom.Instance νλ 건κ°μ ?
1κ°μ μ’μμ
κ΄μ¬κ°μ Έμ£Όμ
μ κ°μ¬ν©λλ€ 
- 컨νΈλ‘€ κ°μ²΄κ° μμ±λ¨κ³Ό λμμ λ°μΈλ©μ μ²λ¦¬ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬ μ΄κΈ° λλ¬Έμ VS UI λμμΈλ¨κ³Όλ λ³κ°μ μμμ
λλ€..!
- λ€ μ κ±° νκ³ μλμ κ°μ΄ λ°λΌμ£Όμλ©΄ λ©λλ€.
λ³κ²½ μ
public class MainWindow : Window
{
public MainWindow(MainWindowViewModel vm)
{
this.DataContext= vm;
}
}
λ³κ²½ ν
- μμ±μμμ μ§μ μ μΈ λ°μ΄ν컨ν
μ€νΈλ μ§μμ€λλ€.
// MainWindow.cs
public class MainWindow : Window
{
public MainWindow(){
}
}
-
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);
});
}
}
- λ§μ§λ§ νμ΄λΌμ΄νΈ! xamlμ μλ λ μ€μ μΆκ°ν΄μ€λλ€.
xmlns:voom="http://lazyVoom.dev/voom"
voom:ViewModelLocator.AutoWireViewModel="True"
μ’ λ μ΄ν΄λ₯Ό λμ°κ³ μ μνμ λ¨κ²¨λ립λλ€. ServiceProvider μμ
1κ°μ μ’μμ
첫λ²μ§Έ μ§λ¬Έμ΄ κΈ°μ‘΄ μ UI 컨νΈλ‘€ μμ± μ°½ μμ Text μ κ°μ μ
λ ₯ νλ©΄ λμμΈμ 보μ΄μ§λμ
κ·Έλ°κ²μ΄ WPF λμμΈλ¨ μμλ λλμ§
νΉμ
λ°μ΄ν°μ»¨ν
μ€νΈ λ°μΈλ© ν μ€ν νμ¬ μ²« νλ©΄ λ¨λ©΄ μ΄κΈ°κ°μ΄ μ€μ λλμ§ (λ·°λͺ¨λΈ μμ±μ κ° μ
ν
)
μ νλ€ λ³΄λ 첫λ²μ§Έ μ§λ¬Έμ΄ λκ°μ§κ° λλ²λ Έλ€μ
λλ²μ§Έ μ§λ¬Έμ λν μΉμ ν μ€λͺ
κ°μ¬ λ립λλ€.
μνλ μλ³΄κ² μ΅λλ€.
1κ°μ μ’μμ
λμμΈλ¨ μ΄λΌλκ²β¦ λλ²κΉ
νμ§μκ³ μ무λ μ§ μμ μνλ₯Ό λ§μνμλκ±°μ£ ? 
λμμΈνμ μ체λ κ°μ²΄λ₯Ό μμ±ν μλκΈ° λλ¬Έμ λ³Όμμμ΅λλ€.
d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=True}"
μ΄κ±° κ΄λ ¨λκ±Έ μ°Ύμ보μλκ² μ’μ κ² κ°μμ.
μ±κΈν€μΌλ‘ μμ±λ λ·°λͺ¨λΈμ λ§μνμλ건μ§β¦μ’ λ μν©μ ꡬ체μ μΌλ‘ λ§μν΄μ£ΌμΈμ!
λ€ κ°μ²΄ μμ± μ μ΄λΌ μ λ°κ±° λ°μ μμλ― νλ€μ
μ±κΈν€μΌλ‘ μμ±λ λ·°λͺ¨λΈ μ μμ±μ μμ 컨νΈλ‘€κ° μ μ€μ ν κ²½μ°β¦ μ μ΄κ²μ λ κ±° κ°λ€μ.
첫λ²μ§Έ μ§λ¬Έμ μ€ν΅ νμ
λ λ κ² κ°μ΅λλ€.
μ κ²½ μ¨ μ£Όμ
μ κ°μ¬ν©λλ€.
λ¨μ μ°ν΄ ν볡 νκ² λ§λ¬΄λ¦¬ νμκΈ°λ₯Ό..
1κ°μ μ’μμ