WPF App.xaml.cs static ์‚ฌ์šฉ ์งˆ๋ฌธ

์•ˆ๋…•ํ•˜์„ธ์š”.

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๊ฐœ์˜ ์ข‹์•„์š”

๋ฌด์‹ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ง์”€ํ•˜์‹  ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜์‹œ๋Š”๊ฒŒ ๋ณด๊ธฐ์—๋Š” ๊น”๋”ํ•˜์ง€์š”. ์–ด๋””์„œ๋“  Static์œผ๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ์š”.
์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ์žˆ์–ด๋ณด์ด๊ฒŒ? ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋ฉด IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์ž…ํ•˜์…”์„œ ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ์…”์„œ ์ž‘์—…ํ•˜์‹œ๋Š” ๊ฒƒ์ธ๋ฐ, ํ•„์š”์„ฑ์„ ๋ชป๋А๋ผ์‹ ๋‹ค๋ฉด ๊ทธ๋ƒฅ ์ง€๊ธˆ์ฒ˜๋Ÿผ ํ•˜์…”๋„ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Static ํด๋ž˜์Šค์— Static ๋งด๋ฒ„๋ฅผ ํ•„์š”์ด์ƒ์œผ๋กœ ๋•Œ๋ ค ๋„ฃ์–ด์„œ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๊ฐ€ ๋˜์–ด ์†Œํ”„ํŠธ์›จ์–ด์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ•ด์น˜๊ธฐ ๋•Œ๋ฌธ์— static์„ ์ง€์–‘ ํ•˜๋Š” ๊ฒƒ์ด์ง€, ์ ์ ˆํ•˜๊ฒŒ ์จ์ฃผ๋ฉด ์ด๊ฒƒ๋งŒํผ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ๋„ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ถ„๋“ค์ด ๋” ์ข‹์€ ์˜๊ฒฌ ์ฃผ์‹ค ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์ง€๊ธˆ ๋ฐฉ์‹์ด ๋‚˜์˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

@Vincent ์ €๋„ ๋™๊ฐํ•ฉ๋‹ˆ๋‹ค. :smile:

@์ •์ดํ˜„ ์•„๋งˆ ์„ฑ๊ฒฉ์€ ๋‹ค๋ฅผ ๊ฒƒ ๊ฐ™์ง€๋งŒ
์ €๋„ ์ตœ๊ทผ์— ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ์š”.

์ €๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ๋„ ํ•ด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 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๊ฐœ์˜ ์ข‹์•„์š”

์ €๋Š” ๋‹ค๋ฅธ ๊ด€์ ์—์„œ ์˜๊ฒฌ์„ ๋“œ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ €, ์ €๋Š” ์ •์  ํด๋ž˜์Šค ์‚ฌ์šฉ์„ ๊ทน๋„๋กœ ์ œํ•œ ํ•ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์–ด๋А์ •๋„ ๊ทœ๋ชจ๊ฐ€ ๋˜๋ฉด ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ค์–ด์ง€๊ฑฐ๋“ ์š”. ๊ทธ๋ฆฌ๊ณ  ์ •์  ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด, ์ถ”์ƒ ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์†Œํ™€์—์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ์ฃผ์‹  ์ฝ”๋“œ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

   App.serial_rs232.SendToSystem();

Firmware์™€ RS232 ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์— ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์„ ํ•˜์‹ค ํ…๋ฐ์š”, ์‚ฌ์‹ค, ํŽŒ์›จ์›Œ์™€ RS232 ํ†ต์‹ ์€ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, SendToSystem()์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ RS232๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์™€ ์ฝ”๋“œ ์‘์ง‘๋ ฅ์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์ง€ํ–ฅ ๊ด€์ ์—์„œ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๊ทธ๋งŒํผ ๋ญ˜ ์ˆ˜์ •ํ•  ๋•Œ ๊ณ ์ณ์•ผ ํ• ๊ฒŒ ๋งŽ์•„์ง„๋‹ค๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

๋Œ€์‹ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋Šฅ์„ ์ถ”์ƒํ™” ํ•˜๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ง์— Serial_rs232 ๋Œ€์‹  IFirmwareCommand ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ, ๋”์ด์ƒ ๊ทธ ๋กœ์ง์—๋Š” Serial_rs232์™€ ๊ด€๋ จ์ด ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ด์œ ์™€๋Š” ์ƒ๊ด€์€ ์—†์ง€๋งŒ, ์ •์  ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ์ง€์–‘ํ•˜๊ณ  ์ด๋Ÿฐ ์ธํ„ฐํŽ˜์ด์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด, ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋กœ์ง์˜ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ์ด ์ƒ๊ธฐ๋Š”์ง€๋ฅผ ์ฝ”๋“œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด, ์ฝ”๋“œ ์‘์ง‘๋ ฅ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ๋ฆ„์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋”ฉ ์‹œ๊ฐ„์ด ๋ˆ„์ ๋˜๋”๋ผ๋„ ์ „๋ฐ˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ์‘์ง‘๋ ฅ ์—†์ด ๋ชจ๋“ˆํ™” ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

@dimohy ์ €๋„ ์—ฌ๊ธฐ์— ํ•œ ํ‘œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
ViewModel ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ MVVM ํŒจํ„ด์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ, App ํด๋ž˜์Šค์˜ ์ ‘๊ทผ์ด ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ์„ฑ๊ฒฉ์ด App์—์„œ ๊ฐ€์ ธ์•ผํ•  ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค.
์‹œ๋ฆฌ์–ผ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์„œ๋น„์Šค(ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์˜ ๋ถ„๋ฆฌ ์ถ”์ฒœ)๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๋‹ค์Œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์œ„์น˜์—์„œ๋Š” DI ๋กœ ํš๋“ํ•ด ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์•„๋‹Œ Windows Forms ์งˆ๋ฌธ์ด์–ด์„œ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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