๊ฐ๋ฐ ๋น์์๋ chatGPT๋ฅผ ์ฐ์ง๋ ์๊ณ ๊ฐ๋ฐ์ ํ๋๋ฐ.
๋ช ๋
์ง๋์ ๋ณด๋ ์ ๋ง ์ฝ๋๊ฐ ๋ถ๋๋ฝ๊ตฐ์.
์ด๋ฒ์๋ ๊ทธ๋ฅ ๋ง์์ ๋ด๋ ค๋๊ณ chatGPT์ ๋ํ๋ฅผ ํ๋ฉด์ ์ต๋ํ ๋น ๋ฅด๊ฒ ๊ฐ์ ์ ํด๋ณด๊ณ ์ถ์ด์ก์ต๋๋ค.
๊ฐ๋ ๊ท์ฐฎ๊ฒ ์ฐ๋ฝ ๋๋ฆฌ๋ฉด์ @์ด๊ด์ @jamesnet214 ์ข์ ๋ง์ ๋ฃ๊ณ ์๋๋ฐ ๋ฐฐ์์๋ ๋์ด ์๊ตฐ์.
์๊ท์ฐฎ์์..์ฌ๋ฐ์ด์
chatGPT์ ์ง๋ฌธํ๋ฉด์ ๋ฐฐ์ด์ .
๋ฌผ์ด๋ณด๋ฉด์ ๋ค์ ํ๋ํ๋ chatgpt๊ฐ ๋ง๋ ์ฝ๋๋ค์ ๋ณด๊ณ ์ด์ ์ ๋ชฐ๋๋ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
(-_-) ๋ญ๊ฐ AI์๊ฒ ํจ๋ฐฐํ ๊ธฐ๋ถ์ด์์ต๋๋ค.
1. ViewModelBase vs ObservableObject
Prism์์๋ ViewModelBase๋ก ๋ถ๋ฅด๋๋ฐ CommunityToolkit์์ ObservableObject๋ก ๋ถ๋ฅด๋ ์ด์ ๋ ์๋๊ตฐ์. ์ค๋ฌด์์๋ ๊ฐํน ๋ชจ๋ธ์ ViewModelBase๋ฅผ ์์๋ฐ๋๋ฐ ๊ทธ๋ผ ViewModel์ฒ๋ผ ๋ณด์ด๋๊น CommunityToolkit์์๋ ObservableObject ํน์ ObservableRecipient๋ก ๋ถ๋ฅด๋๊ตฐ์.
๊ทธ ์๋๊ฐ ์ข์ ๊ฒ ๊ฐ์์ ComvMVVM2์ ์๋ ViewModelBase์ด๋ฆ์ ๋ค์ ๋ณ๊ฒฝํ์ต๋๋ค.
2. CommunityToolkit์ IoC ์ปจํ ์ด๋ ๊ด๋ จ ๊ธฐ๋ฅ
์์ ์ ์์ผ๋ก ๋ด ๋ง์๋๋ก ioc ์ปจํ
์ด๋๋ฅผ ๊ตฌํ ํ ์ ์๋ ๋ด๊ฐ ์์ฃผ ์ฐ๋ ๊ธฐ๋ฅ๋ง์ ๊ตฌํํ๋๋ฐ.
๋ด๊ฐ ๋ชฐ๋๋ ๊ธฐ๋ฅ๋ค์ด ๋ง์์ต๋๋ค.
1. ๊ณต์ฉ ์ธํฐํ์ด์ค ๋ฌถ์์ ๊ฐ์ฒด๋ค์ ํ๋ฒ์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ.
var vms = serviceProvider.GetServices<IAInterface>();
์์ ๊ตฌํ์์๋ IAInterface์ ๊ตฌ์์ฒด๋ฅผ 1๊ฐ๋ง ๋งค์นญํด์ ๋ฃ๊ฒ ๋ง๋ค์์๋๋ฐ CommunityToolkit์ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ฑ๋ก ํ ์ ์๋๋ด ๋๋ค. ใ
2. Factory๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ActivatorUtilities ์กด์ฌ
์ด ๋
์์.. CommunityToolkit์ ์๋ ๋
์์ธ ๊ฒ ๊ฐ์๋ฐ ์ด๋์ ํ์ด๋์์ chatGPT๊ฐ ์๊ณ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง. ์ฝ๋๋ฅผ ๋ณด๋ ๋๊ฒ ์ผ๋ฆฌ๊ฐ ์์์ต๋๋ค.
์ ๊ฐ WPF ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ํ ๋์๋ ๊ฐ์ฒด ์์ฑ์ ์ํ Factory๋ฅผ Lambda๋ก ์ ์ํด์ ์์ฑ์๋ก ์ฃผ์
๋ฐ๊ณ ์ฌ์ฉํ์์ต๋๋ค.
// ๋์ถฉ ์ด๋ฐ ๋๋
serviceCollection.AddTransient<AViewModel>();
serviceCollection.AddTransient<Func<AViewModel>>((serviceProvider) =>{
return () => serviceProvider.GetService<AViewModel>();
})
//๋ง์ฝ Factory์ ์ธ์๋ฅผ ์ฃผ์
ํ๋ฉด์ ์์ฑํ๊ณ ์ถ๋ค๋ฉด
serviceCollection.AddTransient<BViewModel>();
serviceCollection.AddTransient<Func<int, int, AViewModel>((serviceProvider) => {
return (a, b) => {
var vm = serviceProvider.GetService<BViewModel>();
vm.A = a;
vm.B = b;
return vm;
}
});
ํ์ง๋ง.. ActivatorUtilities ๊ฐ ์๋ค๋ฉด ๋ด๊ฐ ํ๋ค๊ฒ Factory๋ฅผ ๋ง๋ค์ด์ ์ฃผ์
ํ ํ์ ์์ด Factory๋ฅผ ๋ง๋ค ์ ์๋๊ตฐ์ ๊ฐ MS
๊ทธ๋ฆฌ๊ณ serviceProvider.GetService(); ๊ฐ ๋๋๋ก return this ์ฒ๋ฆฌ๊ฐ ๋์ด์์ด์
๊ฐ์ฒด์ ์์ฑ์ ์ฃผ์
์ผ๋ก IServiceProvider๋ฅผ ๋ฐ์ ์ ์๋ค๋ ๊ฒ๋ ์ด๋ฒ์ ์ด์ผ๊ธฐํ๋ฉด์ ์๊ฒ ๋์์ต๋๋ค. ๋ค๋ง ์๊ฐํด๋ณด๋ ์ ๋ ๊ฒ IServiceProvider๋ฅผ ์ฃผ์
๋ฐ์์ ์ฐ๋ฉด ๋ญ๊ฐ ์ง์ ๋ถ ํด ์ง ๊ฒ ๊ฐ์๋ฐ. ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ง์ด ๋ง๋ค๋์๋ ์กฐ๊ฑด๋ถ๋ก ์ฌ์ฉํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ์ต๋๋ค.
3. ๋ฉ์ ์ ๊ด๋ จ ๊ธฐ๋ฅ
1. IWeakReferenceMessenger์ Token๊ธฐ๋ฅ.
๋ชจ๋ฅด๋ฉด ๋ชธ์ด ๊ณ ์ํ๋ค๊ณ .. ํ ํฐ์ ์ค์ ํด์ ํน์ ํ ํฐ์ผ๋ก๋ง ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ด ์๋๊ตฐ์ ์ธ์์๋.. ์ด๊ฑธ ๋ชฐ๋ผ์ ๋งค๋ฒ ๋ฉ์ธ์ง์ ๋ณด๋ผ ๊ณณ ์ ๊ณ ๋ฐ๋ ์ชฝ์์ switch์ฒ๋ฆฌํ๋๋ฐ ์ฉ..
2. ObservableRecipient์ IsActive=True ๋์.
IsActive๊ฐ True์ผ๋ ObservableRecipient๊ฐ ์์ ๋ฐ์ IRecipient์ ๋ฉ์ธ์งํธ๋ค๋ฌ?๊ฐ ์๋์ผ๋ก ๋ฑ๋ก์ด ๋๋ค๋ ๊ฒ์ ์ด๋ฒ์ ์ฒ์ ์์์ต๋๋ค -_-โฆ ์ด์ ์๋ OnActivation์ด์๋๊ฐ ๊ฑฐ๊ธฐ์ ๋ฑ๋ก์ ํ์๋๋ฐ ๋ถํ์ํ ์ฝ์ง์ด์์ต๋๋ค. ๋ฐ๋๋ก IsActive=False์ผ๋์๋ ๋ชจ๋ ๋ฉ์ธ์ง ํธ๋ค๋ฌ๊ฐ ๋ฑ๋ก์ด ํด์ ๋๋ ๊ฒ ๊ฐ๋๊ตฐ์. ์์๋ฐ๊ณ ๋ฉ์ธ์ง ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํ ํ์ IsActive๋ง ํค๋ฉด ์๋๋ฑ๋ก ๊ธฐ์ตํด์ผ๊ฒ ์ต๋๋ค. ใ
4. Prism๊ด๋ จ ๊ธฐ๋ฅ
1. INavigationService์ ๋์
๋๋ฆ๋๋ก ์๊ฐํด์ ๋ง๋ค์์๋๋ฐ ๋ค ์ํฐ๋ฆฌ์์ต๋๋ค.
ํํ routeํค?๋ฅผ ์ด์ฉํ ํ๋ฉด ์ด๋? ๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ์ผ ์ง์ ํ INavigationService๊ฐ ์๋๊ฐ ์ถ๋ค์.
route๊ฐ ์ ํ์ํ์ง๋ chatGPT์ ์๋์๊ฒ ๋ฐฐ์ ์ต๋๋ค.
2. Region์ด ์ ItemsControl๊ฐ์ ๋ ์๋ค์๊ฒ๋ ๋ถ๋๋ก ์ค๊ณ๋์ด ์๋๊ฐ?
Region์ ์ด์ฉํด์ ํ๋ฉด์ ๋ถ์ด๋ ๊ฑด ์ด์ ์ ๋ฉ๋์ด ๊ฐ์ ๊ตฌํ์ ํ์๋๋ฐ ItemsControl๊ฐ์ ๋ฆฌ์คํธํํ์ ๋
์์๋ Region์ ๋ถ์ด๋๋ก ํ๋ ๊ธฐ๋ฅ์ด ์ดํด๊ฐ ๋์ง ์์์ ๊ตฌํ์ ํ์ง ์์์ต๋๋ค.
๊ทผ๋ฐ chatGPT ์ ์๋์ด ๋ง์ํ์๋ ๋ถ๋ถ์์ ํฐ ๊นจ๋ซ์์ ์ป์์ต๋๋ค.
๋ง์ฝ ItemsControl์ Region์ด ๋ถ์ง ์๋๋ค๋ฉด ItemsControl์ ์์ ํ View์ ViewModel์์ ItemsControl์ ๋ฟ๋ ค์ผ ํ ๊ฐ์ฒด ๋ฌถ์์ ๊ด๋ฆฌํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ View์ ViewModel์ด ๋์ด๋ ์๋ก ์ผ๊ด๋ ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง๋ค๋ ์ ์
๋๋ค.
Region์ด ์๋ค๋ฉด ๋ฉ๋ฆฌ ๋จ์ด์ง ViewModel๊ณผ ํ๋ฉด๋ผ๋ฆฌ์ ๋ฌถ์ ๋ฐ์ดํฐ ๊ตํ๊ณผ ์๊ฐํ ๊ณผ์ ์ด ๋ถํ์ํ๊ฒ ๋ณต์กํด ์ง๊ธฐ ๋๋ฌธ์ ItemsControl์ ์์ ํ๊ณ ์๋ View์ ViewModel์ด ๋ณต์กํด์ง๋ค๋ ๊ฑฐ์ง์.
3. Module์ On-Demand ๋ก๋
Assembly๋ ๋ก๋ํ ์ํ๋ก Module์ ๋ค์ด๊ฐ ์๋ View๋ ViewModel, ์๋น์ค๋ฑ์ ์์ฑ์ด ํ์ํ ๋ ๋ชจ๋์ ์ด๊ธฐํํ๋ค๋ ๊ธฐ๋ฅ์ด ์๋ค๋ ๊ฒ๋ ๋ชฐ๋์ต๋๋ค ใ ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํ๋ก๊ทธ๋จ ์์์ด ๋นจ๋ผ์ ธ์ ์ข์ ๊ฒ ๊ฐ์ ์ด๋ฒ์ ๊ตฌํํ๊ธฐ๋ก ํ์ต๋๋ค.
์ด์ @gellston ๋์ด๋ ์๊ธฐํ๋ค๊ฐ
โItemsControl์ ์ ๊ตณ์ด Region์ ์ผ์๊น?โ๋ฅผ ๋ค์ ์๊ฐํด๋ดค์ต๋๋ค.
์ ๋ ํ๋์ ๋ฑ ์๋ผ ์ค๋ช
ํ๊ธฐ๋ ์ ๋งคํ๋๋ฐ, ์ ๋ฆฌํด๋ณด๋ฉด ์ด๋ฐ ์ด์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ItemsControl์ ๋ฐ์ธ๋ฉ์ผ๋ก ์ฐ๋ค ๋ณด๋ฉด
๊ฒฐ๊ตญ DataTemplate๋ก ViewModel ํ์
๋ง๋ค ํ๋ฉด์ ๋๋๊ฒ ๋๋๋ฐ,
1~2๊ฐ๋ฉด ๋ชฐ๋ผ๋ ํ๋ฉด์ด ๋์ด๋๊ธฐ ์์ํ๋ฉด
์์นซ XAML์ด ๋์์ด ๋์ด๋๋ ๊ตฌ์กฐ๊ฐ ๋๊ธฐ ์ฝ์ต๋๋ค.
๊ฒ๋ค๊ฐ ํ๋ฉด์ด ํ์ฅ๋๋ฉด์ ๊ธฐ๋ฅ์ด ๋ถ๊ธฐ ์์ํ๋ฉด,
ํน์ ํ์
์ผ ๋๋ง ๋์ํ๋ ๋ก์ง์ด๋
์ฐ๊ฒฐํด์ผ ํ ์๋น์ค๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๋ ๋ง์์ง๊ณ ,
์ด๋ฐ ์์๋ค์ด ์์ด๋ฉด์
๋จ์ํ DataTemplate ์์์ ํด๊ฒฐํ๊ธฐ์
UI ํํ๋ ๋ณต์ก๋๊ฐ ๊ฐ๋นํ๊ธฐ ์ด๋ ค์ด ์์ค๊น์ง ์ฌ๋ผ๊ฐ ์ ์์ต๋๋ค.
Region์ ์ฐ๋ ์ชฝ์ ์ด๊ฑธ ๊ตฌ์กฐ์ ์ผ๋ก ๋์ ์ ์๊ณ ์.
๊ฐ View๋ ํ์ํ ๋ Region์ ๋ค์ด์ค๊ณ ,
ItemsControl ์ชฝ ViewModel์
โ๋ญ ๊ทธ๋ฆด์งโ๋ณด๋ค๋ โ์๋ฆฌ๋ฅผ ๋ด์ฃผ๋ ์ญํ โ์ ๊ฐ๊น์์ง๋๋ค.
ItemsControl์ Region๋ฟ๋ง ์๋๋ผ,
Region ๊ตฌ์กฐ ์์ฒด๊ฐ
MVVM์ ์์ฃผ ์๊ฒฉํ๊ฒ ๊ฐ์ ธ๊ฐ๋ ๋ฐฉ์๋ณด๋ค๋,
ViewโViewModel์ ํ ์์ผ๋ก ๋ฌถ์ด
์ปดํฌ๋ํธ์ฒ๋ผ ๋ค๋ฃจ๋ ๋ฐ ์ ๋ง๋ ์ ํ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
