Windows Forms์—์„œ MVVM ํ•˜๊ธฐ

ใ€C#ใ€‘WinFormsใงMVVMใ—ใŸใ„ใ‹ใ‚‰ReactivePropertyใซใƒใ‚คใƒณใƒ‰ใ™ใ‚‹ - Qiita

์นด์นด์˜คํ†ก ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ โ€˜๋‹ท๋„ท C# ๊ฐœ๋ฐœ์ž ๋ชจ์ž„โ€™ ์—์„œ โ€˜์•ผ์Šค์˜คโ€™ ๋‹˜์ด ๊ณต์œ ํ•ด์ฃผ์‹  ๊ธ€์ž…๋‹ˆ๋‹ค.

Windows Forms์˜ ์ตœ๊ณ  ๋‹จ์ ์ด Binding์€ ๊ฐ€๋Šฅํ•œ๋ฐ WPF์ฒ˜๋Ÿผ Property Binding์ด ์–ด๋ ต๋‹ค๊ฑฐ๋‚˜, DataContext๊ฐ€ ์—†์–ด์„œ Command๋ฅผ ์ง€์›ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ์ ์ด์—ˆ๋Š”๋ฐ์š”.

์œ„ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด PropertyBinding์„ ํ•˜๋ฉด์„œ, .NET 7 Windows Forms ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ Command๋ฅผ ์ด์šฉํ•˜๋ฉด Windows Forms์—์„œ๋„ ์™„์ „ํ•œ MVVM์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฏธ๋ž˜๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

7๊ฐœ์˜ ์ข‹์•„์š”

Winform์—์„œ Binding ์ด๋ผ๋‹ˆ~ ์žฌ๋ฏธ์žˆ๋„ค์š”.
Winform ๊ฐœ๋ฐœ์„ ์ฃผ๋กœ ํ•˜๋‹ค๋ณด๋‹ˆ ๋”์šฑ ๊ด€์‹ฌ์ด ๊ฐ€๋„ค์š”.
์ข‹์€ ์†Œ์‹ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค~

3๊ฐœ์˜ ์ข‹์•„์š”

๊ทธ๋Ÿฌ๋ฉด CommunityToolkit.Mvvm๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”?

3๊ฐœ์˜ ์ข‹์•„์š”

Windows Forms๋„ ์›๋ž˜ DataBinding์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

Property Binding ๊ฐ™์€ ๊ฒฝ์šฐ์—๋„ DataTable์ด๋‚˜ BindingList ๊ฐ™์€ ๊ฒƒ์„ ๋งŒ๋“ค์–ด์„œ Row Item 1๊ฐœ๋‚˜, Items Count๋ฅผ 1๊ฐœ๋ฅผ ๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ๋งŒ ํ–ˆ์–ด์•ผ ํ–ˆ๊ธฐ์— ์กฐ๊ธˆ ๋ถˆํŽธํ–ˆ์œผ๋ฉฐ, Design Time์—์„œ Property Grid๋ฅผ ์ด์šฉํ•ด์„œ Binding ์„ ์กฐ๊ธˆ ๋ถˆํŽธํ•˜๊ฒŒ ํ–ˆ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์•ˆํƒ€๊นŒ์šด ๋งˆ์Œ์€ Windows Forms์— ์—ฌ๋Ÿฌ MVVM์ด๋‚˜, Command๋ฅผ ์ง€์›ํ•ด ์ค€๋‹ค๊ณ  ํ•ด๋„, Windows Forms๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋งˆ์ธ๋“œ๊ฐ€ ๋ณ€ํ™”ํ•ด์„œ MVVM์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ์„์ง€๋Š” ๋ฏธ์ง€์ˆ˜? ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คโ€ฆใ… ใ… 

2๊ฐœ์˜ ์ข‹์•„์š”

Toolkit ์ž์ฒด์•ผ Windows Forms์™€๋Š” ๋ณ„๊ฐœ๋กœ ๊ทธ๋ƒฅ Console ํ”„๋กœ์ ํŠธ์—๋„ ์„ค์น˜ํ•ด์„œ Source Generator๋กœ ์ƒ์„ฑํ•˜๋˜ ์ง์ ‘ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋˜ ์ข…์†๋œ ๊ธฐ์ˆ ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  Notify๊ฐ€ ํ•„์š”ํ•˜๋ƒ ์•ˆํ•„์š”ํ•˜๋ƒ๋Š” ๋”ฐ์ ธ๋ด์•ผ๊ฒ ์ง€๋งŒ, INotifyPropertyChanged ์ž์ฒด๋Š” Windows Forms์—์„œ๋„ BindingList์— ์†ํ•˜๋Š” ์ปฌ๋ ‰์…˜ Item ์˜ ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•œ ๋ฉ”์นด๋‹ˆ์ฆ˜์œผ๋กœ ๋™์ž‘์€ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

5๊ฐœ์˜ ์ข‹์•„์š”