wpf xaml๊ณผ viewmodel ์—ฐ๊ฒฐ

์•ˆ๋…•ํ•˜์„ธ์š” xaml์—์„œ binding์„ ์ฒ˜๋ฆฌํ•  ๋•Œ mvvmtoolkit generator ๋กœ ๋งŒ๋“ค์–ด์ง„ ์†์„ฑ๋“ค์„ ์ž๋™์™„์„ฑ์ด ๋˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์–ด์„œ datacontext๋ฅผ ์ง€์ •ํ•˜๊ณ  ์žˆ๋Š”๋ฐ
์ด๋Ÿฐ์‹์œผ๋กœ ๋น„ํ•˜์ธ๋“œ ์ฝ”๋“œ์—๋งŒ ์ง€์ •ํ–ˆ์„ ๋•Œ๋Š” xamlํŒŒ์ผ์—์„œ ์ž๋™์™„์„ฑ์ด ์•ˆ๋˜๊ณ 

์ด๋ ‡๊ฒŒ xaml์— ์ง์ ‘ ์ž‘์„ฑ์„ ํ•ด์•ผ์ง€๋งŒ binding ์ฒ˜๋ฆฌ ์‹œ ์ž๋™์™„์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๊ถ๊ธˆํ•œ ๊ฑด ์ด๋ ‡๊ฒŒ xaml์— ์ง์ ‘ ์ž‘์„ฑ์„ ํ•˜๋ฉด The service provider has not been configured yet. ์ด๋ž€ ์—๋Ÿฌ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๊ธด ํ•˜๋Š”๋ฐ ๋นŒ๋“œ๋Š” ๋˜ ๋˜์–ด์„œ ์ด๊ฒŒ ๋ฌด์—‡์„ ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์งˆ๋ฌธ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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

์šฐ์„  ์ •ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ์…”์•ผ ์ง„๋‹จ์ด ๊ฐ€๋Šฅํ•  ๋“ฏ ํ•œ๋ฐ, ์ œ ์ถ”์ธก์œผ๋กœ๋Š”

์ฝ”๋“œ๋น„ํ•˜์ธ๋“œ์— ์ž‘์„ฑํ•˜์‹  DataContext์— ViewModel์„ ์ง์ ‘ ํ• ๋‹นํ•˜๋Š” ํ–‰์œ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Runtime์— ๋™์ž‘ํ•˜๋Š” ์‹œ์ ์ž…๋‹ˆ๋‹ค.

๋•Œ๋ฌธ์— WPF XAML์€ Buildํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ์œ ์ง€ํ˜• ๋””์ž์ธํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง ์†Œ์Šค์ œ๋„ค๋ ˆ์ดํ„ฐ ์†์„ฑ์ด ์•ˆ๋งŒ๋“ค์–ด์ง„ ์‹œ์ ์ด ์•„๋‹Œ๊ฐ€? ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ญ”๊ฐ€ ๋งํ•˜๋ฉด์„œ๋„ ์ด๊ฒŒ ์•„๋‹Œ ๊ฑฐ ๊ฐ™๊ธดํ•œ๋ฐ, ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”
<Grid Name="_grid"...>
    <Grid.DataContext>
        <vm:NewWorkOrderViewModel/>
    </Grid.DataContext>

์œ„์˜ ์ฝ”๋“œ๋Š” ๋””์ž์ธ ํƒ€์ž„์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

_grid.DataContext = new NewWorkOrderViewModel();

์ฆ‰ ์‹ค์ œ ViewModel ์ธ์Šคํ„ด์Šค๊ฐ€ ๋””์ž์ธ ํƒ€์ž„์— ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด์ฃ .

๋˜ํ•œ, ๋Ÿฐํƒ€์ž„์—์„œ๋„ ์ตœ์ƒ์œ„์˜ DataContext๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ Grid์˜ DataContext๋กœ ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ํ• ๋‹น๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ, The service provider has not been configured yet. ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„œ ์ถ”์ธกํ•ด๋ณด๋ฉด NewOrderViewModel์˜ ์ƒ์„ฑ์ž ์•ˆ์—์„œ ์ „์—ญ IoC ServiceProvider๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์„ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋””์ž์ธ ํƒ€์ž„์— ์›๋ž˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ง„์ž…์ ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ •์ƒ์ ์ธ ServiceProvider ๊ตฌ์„ฑ ์—†์ด ์ฐธ์กฐ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์— ๋Œ€ํ•ด, WPF์—์„œ๋Š” ๋””์ž์ธ ํƒ€์ž„์— XAML ๋””์ž์ด๋„ˆ์—๊ฒŒ ์‚ฌ์šฉํ•  DataContext์˜ ํ˜•์‹ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

<UserControl x:Class="NewWorkOrder"
    d:DataContext="{d:DesignTimeInstance {x:Type vm:NewWorkOrderViewModel},
                                         IsDesignTimeCreatable=false}" 

์œ„์™€ ๊ฐ™์ด d:DataContext์†์„ฑ(DataContext ์•„๋‹˜, ์ ‘๋‘์–ด d: ์‚ฌ์šฉ)์— {d:DesignTimeInstance ... IsDesignTimeCreatable=false}์„ ์ง€์ •ํ•ด์ฃผ๋ฉด DataContext๋กœ ์‚ฌ์šฉํ•  ํ˜•์‹ ์ •๋ณด๋งŒ ์ธ์‹ํ•˜๊ฒŒ๋˜์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ XAML ํŽธ์ง‘๊ธฐ์—์„œ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‹ต๋ณ€๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

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

๋‹ต๋ณ€๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค
์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๊ธด ํ•˜๋Š”๋ฐ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์€ ๋˜ ๋˜์„œ โ€ฆ.

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

๋„ค ์‚ฌ์‹ค ์งˆ๋ฌธํ•˜์‹  ๋‚ด์šฉ๊ณผ ๋‹ค๋ฅธ ์–˜๊ธฐ๊ธด ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์• ์ดˆ์— Binding์€ BindingPath๋ผ๋Š” PropertyName์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์†์„ฑ์ด ์—†๋”๋ผ๋„ Binding Error๊ฐ€ ๋ฐœ์ƒํ•˜์ง€, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ด ์•ˆ๋˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์œ„์— @al6uiz ๋‹˜ ๋‹ต๋ณ€๋Œ€๋กœ ํ˜„์žฌ xaml๊ณผ ์ฝ”๋“œ๋น„ํ•˜์ธ๋“œ์— ๋‘ ๋ฒˆ ViewModel์„ ํ• ๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ํƒ€์ž…์˜ ViewModel ๊ฐ์ฒด๋ฅผ 2๊ฐœ๋ฅผ ํ• ๋‹นํ•˜์‹  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ํ•˜๋‚˜๋Š” ๋‚ญ๋น„์ด๊ฒ ์ง€์š”. ๋‹ค๋งŒ ์–ด๋””์—์„œ ์ €๋Ÿฐ Warning์ด ๋ฐœ์ƒํ•˜๋Š”์ง€๋Š” ๊ทธ๋ถ€๋ถ„์ด ์ œ๊ฐ€ ๊ฒฝ๋ ฅ์ด ์•„์ง ์งง์•„์„œ ์ถ”์ธกํ–ˆ๋˜ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ๋‹ฌ๋ผ๊ณ  ๋ง์”€๋“œ๋ฆฐ ๋ถ€๋ถ„์ธ๋ฐ, ServiceProvider ๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ € ์‚ฌ์ง„์—๋Š” ServiceProvider๊ฐ€ ์•ˆ๋‚˜์™€์žˆ๊ณ , ServiceProvider๋Š” ๋‹จ์–ด๊ฐ€ .NET์— ์ด๋ฏธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•˜๊ฒŒ ํŒ๋‹จํ•˜๊ณ ์ž ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ๋‹ฌ๋ผ๊ณ  ๋ง์”€ ๋“œ๋ฆฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

d: ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋ฉด Build์ „ ๋””์ž์ธ ํƒ€์ž„์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์ „์šฉ ์†์„ฑ์ด๋ฏ€๋กœ ๊ฐœ๋ฐœ์€ ํŽธํ•˜๊ฒŒ, Runtime์—์„œ๋Š” ๋ฌด์‹œํ•ด์„œ ๋™์ž‘์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— @al6uiz ๋‹˜์˜ ๋‹ต๋ณ€์ฒ˜๋Ÿผ ํ•˜์‹œ๋ฉด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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