1. App.xaml에서 startup, exit 나눠 놓는다. 한번에 시작하면 편하긴하지만 뷰가 헤비해질 수 있으며, 시작과 종료시 메모리관리가 좋음
  2. startup에서 MainWindow.xaml을 실행시킨다.
<Application x:Class="CameraWPF.App"
             xmlns="<http://schemas.microsoft.com/winfx/2006/xaml/presentation>"
             xmlns:x="<http://schemas.microsoft.com/winfx/2006/xaml>"
             xmlns:local="clr-namespace:CameraWPF"
             **Startup="Application_Startup"
             Exit="Application_Exit"**>
    <Application.Resources>
         
    </Application.Resources>
</Application>
public partial class App : Application
{
    private MainWindow _mainWindow;
    private MainViewModel _mainViewModel;

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        _mainViewModel = new MainViewModel();
        _mainWindow = new MainWindow(_mainViewModel);

        _mainWindow.Show();
    }

    private void Application_Exit(object sender, ExitEventArgs e)
    {

    }
}
public partial class MainWindow : Window
{
    private MainViewModel _mainViewModel;

    public MainWindow(MainViewModel mainViewModel)
    {
        _mainViewModel = mainViewModel;
        InitializeComponent();
        
        // 바인딩을 위한 권한
        this.DataContext = _mainViewModel;
    }
}

기본 바인딩

public class MainViewModel : **INotifyPropertyChanged**
{
	public event PropertyChangedEventHandler PropertyChanged;
	
	public void OnPropertyChanged(string propertyName)
	{
    if (PropertyChanged != null)
    {
      // View 
      this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
	}
}