์๋
ํ์ธ์ xaml์์ binding์ ์ฒ๋ฆฌํ ๋ mvvmtoolkit generator ๋ก ๋ง๋ค์ด์ง ์์ฑ๋ค์ ์๋์์ฑ์ด ๋๊ฒ ํ๊ณ ์ถ์ด์ datacontext๋ฅผ ์ง์ ํ๊ณ ์๋๋ฐ
์ด๋ฐ์์ผ๋ก ๋นํ์ธ๋ ์ฝ๋์๋ง ์ง์ ํ์ ๋๋ xamlํ์ผ์์ ์๋์์ฑ์ด ์๋๊ณ
์ด๋ ๊ฒ xaml์ ์ง์ ์์ฑ์ ํด์ผ์ง๋ง binding ์ฒ๋ฆฌ ์ ์๋์์ฑ์ด ๋ฉ๋๋ค. ์ ๊ฐ ๊ถ๊ธํ ๊ฑด ์ด๋ ๊ฒ xaml์ ์ง์ ์์ฑ์ ํ๋ฉด The service provider has not been configured yet. ์ด๋ ์๋ฌ์ฝ๋๊ฐ ๋์ค๊ธด ํ๋๋ฐ ๋น๋๋ ๋ ๋์ด์ ์ด๊ฒ ๋ฌด์์ ์ ๊ฐ ๋์น๊ณ ์๋ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ด์ ์ง๋ฌธ๋๋ฆฝ๋๋ค.
1๊ฐ์ ์ข์์
Vincent
2
์ฐ์ ์ ํํ ์ฝ๋๋ฅผ ๋ณด์ฌ์ฃผ์
์ผ ์ง๋จ์ด ๊ฐ๋ฅํ ๋ฏ ํ๋ฐ, ์ ์ถ์ธก์ผ๋ก๋
์ฝ๋๋นํ์ธ๋์ ์์ฑํ์ DataContext์ ViewModel์ ์ง์ ํ ๋นํ๋ ํ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Runtime์ ๋์ํ๋ ์์ ์
๋๋ค.
๋๋ฌธ์ WPF XAML์ Buildํ๋ฉด ์์ฑ๋๋ ์ ์งํ ๋์์ธํ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ง ์์ค์ ๋ค๋ ์ดํฐ ์์ฑ์ด ์๋ง๋ค์ด์ง ์์ ์ด ์๋๊ฐ? ์ถ์ต๋๋ค.
๋ญ๊ฐ ๋งํ๋ฉด์๋ ์ด๊ฒ ์๋ ๊ฑฐ ๊ฐ๊ธดํ๋ฐ, ์ฌํ ๊ฐ๋ฅํ ์ฝ๋๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
2๊ฐ์ ์ข์์
al6uiz
3
<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๊ฐ์ ์ข์์
Vincent
6
๋ค ์ฌ์ค ์ง๋ฌธํ์ ๋ด์ฉ๊ณผ ๋ค๋ฅธ ์๊ธฐ๊ธด ํ์ง๋ง ์ปดํ์ผ ์๋ฌ๋ ๋ฐ์ํ์ง ์์ ๊ฒ์
๋๋ค.
์ ์ด์ Binding์ BindingPath๋ผ๋ PropertyName์ ํตํด ์ฐ๊ฒฐ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ์์ฑ์ด ์๋๋ผ๋ Binding Error๊ฐ ๋ฐ์ํ์ง, ํ๋ก๊ทธ๋จ ์คํ์ด ์๋์ง๋ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์์ @al6uiz ๋ ๋ต๋ณ๋๋ก ํ์ฌ xaml๊ณผ ์ฝ๋๋นํ์ธ๋์ ๋ ๋ฒ ViewModel์ ํ ๋นํ๊ณ ์์ต๋๋ค. ๊ฐ์ ํ์
์ ViewModel ๊ฐ์ฒด๋ฅผ 2๊ฐ๋ฅผ ํ ๋นํ์ ๊ฒ์
๋๋ค. ๋น์ฐํ ํ๋๋ ๋ญ๋น์ด๊ฒ ์ง์. ๋ค๋ง ์ด๋์์ ์ ๋ฐ Warning์ด ๋ฐ์ํ๋์ง๋ ๊ทธ๋ถ๋ถ์ด ์ ๊ฐ ๊ฒฝ๋ ฅ์ด ์์ง ์งง์์ ์ถ์ธกํ๋ ๋ถ๋ถ์ด์์ต๋๋ค.
๊ทธ๋์ ์ฝ๋๋ฅผ ๋ณด์ฌ๋ฌ๋ผ๊ณ ๋ง์๋๋ฆฐ ๋ถ๋ถ์ธ๋ฐ, ServiceProvider ๋ผ๋ ๋จ์ด๊ฐ ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ ์ฌ์ง์๋ ServiceProvider๊ฐ ์๋์์๊ณ , ServiceProvider๋ ๋จ์ด๊ฐ .NET์ ์ด๋ฏธ ์๊ธฐ ๋๋ฌธ์ ์ ํํ๊ฒ ํ๋จํ๊ณ ์ ์ฝ๋๋ฅผ ๋ณด์ฌ๋ฌ๋ผ๊ณ ๋ง์ ๋๋ฆฐ ๊ฒ์
๋๋ค.
d: ์์ฑ์ ์ฌ์ฉํด์ ํ๋ฉด Build์ ๋์์ธ ํ์์์๋ง ๋์ํ๋ ์ ์ฉ ์์ฑ์ด๋ฏ๋ก ๊ฐ๋ฐ์ ํธํ๊ฒ, Runtime์์๋ ๋ฌด์ํด์ ๋์์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ @al6uiz ๋์ ๋ต๋ณ์ฒ๋ผ ํ์๋ฉด ๋ ๊ฒ์
๋๋ค.
3๊ฐ์ ์ข์์