Language - C#/C#(UI - WPF)

C# - WPF MVVM Pattern 기본

KimTory 2021. 11. 26. 11:39

▶ Goal 

 

 그래서 이번 포스팅에서는 Winform이 아닌 WPF를 통한 MVVM Pattern으로 Data를 Binding하여 관리 할 수 있게끔

간단한 예제를 포스팅하겠습니다. 

 

▶ Theory

 

View - 사용자의 눈에 보이는 UI를 담당하는 곳
Model - 데이터 처리(FILEIO나 DB를 사용해 데이터를 저장하는곳)
ViewModel - View를 표현하기 위한 Model로 VIew에서 들어온 데이터를 가공하며 Model과의 통신한후 View단과의 Binding을 통해 데이터를 자동으로 갱신시켜 주는곳

 

https://frozenpond.tistory.com/53?category=1153471 

 

wpf MVVM패턴을 활용한 간단한 환율계산기 만들기

이번게시글에서는 MVVM패턴을 활용한 환율계산기를 포스팅하겠습니다. 먼저 MVVM 패턴에 대해 알아보겠습니다. MVVM패턴이란 Model-View-ViewModel의 약자로 웹개발에서 흔히 사용하는 MVC패턴에서 컨트

frozenpond.tistory.com

 


 

[ Class 구성 ]

MVVM Pattern을 보다 보기 쉽게 폴더별로 Class 구별

 

[ Model ]

ViewModel과 Data를 서로 주고 받는 역할

 

[ ViewModel ]

View의 추상화된 형태, View에 보이는 속성들과 바인딩 되어 있어 갱신된 Data를 View가 받을 수 있게 해주는 역할

 

using MVVMPattern.Model;
using System.Windows;

namespace MVVMPattern.ViewModel 
{
    public class ViewModel : INotifyPropertyChanged
    {
        private MainModel mainModel = null;
        public event PropertyChangedEventHandler PropertyChanged;
        public ViewModel()
        {
            mainModel = new MainModel();
        }
        public string Dollar
        {
            get
            {
                if(string.IsNullOrEmpty(mainModel.dollar))
                {
                    Won = "0";
                }
                else
                {
                    int num = -1;
                    if (int.TryParse(mainModel.dollar, out num))
                    {
                        int result = num * 1160; // 현재 환율
                        Won = result.ToString();
                    }
                    else
                    {
                        MessageBox.Show("Number Checnk");
                        Won = "0";
                        Dollar = string.Empty;
                    }
                }
                return mainModel.dollar;    
            }
            set
            {
                if(mainModel.dollar != value)
                {
                    mainModel.dollar = value;
                    OnPropertyChanged("Dollar");
                }
            }
        }
        public string Won
        { 
            get 
            { 
                return mainModel.won; 
            } 
            set 
            { 
                mainModel.won = value; 
                OnPropertyChanged("Won"); 
            } 
        }
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

 

[ MainWindow ]

 

ViewModel과 Binding

 

[ Main U.I ]