์๋
ํ์ธ์.
wpf๋ก ์๋ฃ๊ธฐ๊ธฐ GUI ์์
์ ํ๊ณ ์์ต๋๋ค.
Firmware์ rs232ํต์ ์ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
App.xaml.cs์๋ค๊ฐ ์๋ ์ฒ๋ผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
public staitc Serial_rs232 serial_rs232;
public App()
{
serial_rs232 = new Serial_rs232
}
์ด๋ ๊ฒ ํ๊ณ ์๋ ์ฒ๋ผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
App.serial_rs232.SendToSystem();
์ด๋ ๊ฒ ์ฌ์ฉ ํ๋ ์ด์ ๋
์ด๋์๋ ์ ๊ทผ๊ฐ๋ฅํ๋ฉด์ Firmware๋ก ํต์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋๋ก
ํ๊ธฐ ์ํจ์ธ๋ฐ์
wpf์์ ๋ณดํต ๋จ์ผ ์ธ์คํด์ค๋ก ๊ด๋ฆฌํ๋ฉด์ ์ด๋์๋ ์ ๊ทผํ์ฌ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ ค๊ณ ํ ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ๊น์?
์ ๊ฐ ์ฐ๋ ๋ฐฉ์์ ๋๋ฌด ๋ฌด์ํ ๋ฐฉ๋ฒ์ธ๊ฑฐ ๊ฐ์์์^^;;
2๊ฐ์ ์ข์์
Vincent
2
๋ฌด์ํ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ง์ํ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์๋๊ฒ ๋ณด๊ธฐ์๋ ๊น๋ํ์ง์. ์ด๋์๋ Static์ผ๋ก ์ ๊ทผ๊ฐ๋ฅํ๋๊น์.
์ฌ๊ธฐ์ ์กฐ๊ธ ์์ด๋ณด์ด๊ฒ? ํ๊ณ ์ถ์ผ์๋ฉด IoC ์ปจํ
์ด๋๋ฅผ ๋์
ํ์
์ ์ฑ๊ธํด ์ธ์คํด์ค๋ฅผ ๋ง๋์
์ ์์
ํ์๋ ๊ฒ์ธ๋ฐ, ํ์์ฑ์ ๋ชป๋๋ผ์ ๋ค๋ฉด ๊ทธ๋ฅ ์ง๊ธ์ฒ๋ผ ํ์
๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Static ํด๋์ค์ Static ๋งด๋ฒ๋ฅผ ํ์์ด์์ผ๋ก ๋๋ ค ๋ฃ์ด์ ์คํ๊ฒํฐ ์ฝ๋๊ฐ ๋์ด ์ํํธ์จ์ด์ ์ธ ๊ตฌ์กฐ๋ฅผ ํด์น๊ธฐ ๋๋ฌธ์ static์ ์ง์ ํ๋ ๊ฒ์ด์ง, ์ ์ ํ๊ฒ ์จ์ฃผ๋ฉด ์ด๊ฒ๋งํผ ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค๋ฅธ ๋ถ๋ค์ด ๋ ์ข์ ์๊ฒฌ ์ฃผ์ค ์๋ ์์ผ๋, ์ง๊ธ ๋ฐฉ์์ด ๋์๋ค๊ณ ์๊ฐํ์ง๋ ์์ต๋๋ค.
2๊ฐ์ ์ข์์
@Vincent ์ ๋ ๋๊ฐํฉ๋๋ค. 
@์ ์ดํ ์๋ง ์ฑ๊ฒฉ์ ๋ค๋ฅผ ๊ฒ ๊ฐ์ง๋ง
์ ๋ ์ต๊ทผ์ ๊ตฌํํ ๋ถ๋ถ์ด ์๋๋ฐ์.
์ ๋ ์ด๋ฐ์์ผ๋ก๋ ํด๋ณด๊ณ ์์ต๋๋ค. App.cs
main.DataContext = new MainViewModel(Theme, Culture);
public class App : FlowApp
{
protected override ThemeType OnSetDefaultTheme(ThemeType type)
=> ThemeType.Dark;
protected override void OnApplyThemeManager()
{
AddTheme(ThemeType.Dark, "Generic.Dark.xaml");
AddTheme(ThemeType.White, "Generic.White.xaml");
AddTheme(ThemeType.James, "Generic.James.xaml");
AddTheme(ThemeType.Elena, "Generic.Elena.xaml");
}
protected override void OnApplyCultureManager()
{
AddLanguage(LanguageType.UnitedStates, "EN.xaml");
AddLanguage(LanguageType.Korea, "KO.xaml");
AddLanguage(LanguageType.China, "CN.xaml");
AddLanguage(LanguageType.Japan, "JP.xaml");
}
protected override void OnStartup(StartupEventArgs e)
{
bool dialogResult = true;
ConfigModel config = FlowConfig.LoadConfig();
Theme.Switch(config.Theme);
Culture.Switch(config.Language);
while (dialogResult)
{
ShutdownMode = ShutdownMode.OnExplicitShutdown;
var main = new MainView();
main.DataContext = new MainViewModel(Theme, Culture);
main.ShowDialog();
dialogResult = (bool)main.DialogResult;
}
Environment.Exit(0);
}
}
1๊ฐ์ ์ข์์
dimohy
5
์ ๋ ๋ค๋ฅธ ๊ด์ ์์ ์๊ฒฌ์ ๋๋ ค๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ , ์ ๋ ์ ์ ํด๋์ค ์ฌ์ฉ์ ๊ทน๋๋ก ์ ํ ํฉ๋๋ค. ์ด์ ๋ ์์ค์ฝ๋๊ฐ ์ด๋์ ๋ ๊ท๋ชจ๊ฐ ๋๋ฉด ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง๊ฑฐ๋ ์. ๊ทธ๋ฆฌ๊ณ ์ ์ ํด๋์ค๋ก ์ฌ์ฉํ๋ค ๋ณด๋ฉด, ์ถ์ ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ํ์์ง๊ฒ ๋ฉ๋๋ค. ๊ณต์ ์ฃผ์ ์ฝ๋๋ก ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
App.serial_rs232.SendToSystem();
Firmware์ RS232 ํต์ ์ ํ๊ธฐ ์ํด ์์ ์ฒ๋ผ ์ฌ์ฉ์ ํ์ค ํ
๋ฐ์, ์ฌ์ค, ํ์จ์์ RS232 ํต์ ์ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์ต๋๋ค. ์ฆ, SendToSystem()์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ RS232๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์ ์ฝ๋ ์์ง๋ ฅ์ด ์๊ธฐ๋ ๊ฒ์ ๊ฐ์ฒด์งํฅ ๊ด์ ์์ ์ข์ง ์์ต๋๋ค. (๊ทธ๋งํผ ๋ญ ์์ ํ ๋ ๊ณ ์ณ์ผ ํ ๊ฒ ๋ง์์ง๋ค๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.)
๋์ , ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ๊ธฐ๋ฅ์ ์ถ์ํ ํ๊ณ ๊ทธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ก์ง์ Serial_rs232 ๋์ IFirmwareCommand ๋ฑ์ผ๋ก ์ฌ์ฉ์ ํฉ๋๋ค. ์ด์ , ๋์ด์ ๊ทธ ๋ก์ง์๋ Serial_rs232์ ๊ด๋ จ์ด ์๊ฒ ๋ฉ๋๋ค.
์์ ์ด์ ์๋ ์๊ด์ ์์ง๋ง, ์ ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ์ง์ํ๊ณ ์ด๋ฐ ์ธํฐํ์ด์ค ์ธ์คํด์ค๋ฅผ ์ธ์๋ก ๋ฐ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด, ์์ฐ์ค๋ฝ๊ฒ ๋ก์ง์ ํด๋์ค๊ฐ ์ด๋ค ์ธ์คํด์ค์ ๊ด๋ จ์ด ์๊ธฐ๋์ง๋ฅผ ์ฝ๋๋ก ํ์ธํ ์ ์๊ฒ ๋๊ณ , ๊ทธ๋ฌ๋ค๋ณด๋ฉด, ์ฝ๋ ์์ง๋ ฅ์ ๋ฎ์ถ๊ธฐ ์ํด ์ธํฐํ์ด์ค ๋๋ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ ํ๋ฆ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋ฉ ์๊ฐ์ด ๋์ ๋๋๋ผ๋ ์ ๋ฐ์ ์ธ ์ฝ๋๊ฐ ๊ทธ๋ฌํ ์์ง๋ ฅ ์์ด ๋ชจ๋ํ ๋ ์ ์๊ฒ ๋ฉ๋๋ค.
5๊ฐ์ ์ข์์
@dimohy ์ ๋ ์ฌ๊ธฐ์ ํ ํ ํ๊ฒ ์ต๋๋ค.
ViewModel ํ๋ก์ ํธ๋ฅผ ๋ถ๋ฆฌํ์ฌ MVVM ํจํด์ ์๊ฒฉํ๊ฒ ๊ตฌํํ ๊ฒฝ์ฐ, App ํด๋์ค์ ์ ๊ทผ์ด ์ด๋ ค์ธ ์๋ ์์ต๋๋ค.
๋ํ ๊ธฐ๋ฅ์ด๋ ์ฑ๊ฒฉ์ด App์์ ๊ฐ์ ธ์ผํ ๊ฒ์ ์๋๊ธฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์ข์๋ณด์
๋๋ค.
์๋ฆฌ์ผ ํต์ ์ ์ํ ๋ณ๋์ ์๋น์ค(ํ๋ก์ ํธ ์์ค์ ๋ถ๋ฆฌ ์ถ์ฒ)๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ์ธํฐํ์ด์ค๋ก๋ง ํธ์ถํ ์ ์๋๋ก ํ ๋ค์ ์ค์ ๋ก ์ฌ์ฉํ๋ ์์น์์๋ DI ๋ก ํ๋ํด ํธ์ถํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
4๊ฐ์ ์ข์์
rkttu
7
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์ง๋ฌธ์ด ์๋ Windows Forms ์ง๋ฌธ์ด์ด์ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด๋๋ฆฝ๋๋ค.
2๊ฐ์ ์ข์์