전체 글

· WPF
ICommand는 WPF 컨트롤의 Command 속성에 Binding 하기 위해 사용합니다. WPF 프로젝트가 아니어도 사용할 수 있지만 WPF가 아니라면 굳이 사용할 필요가 없습니다. ICommand는 RelayCommand라는 클래스로 구현하여 사용하는 게 일반적인데 잘 사용하려면 약간의 이해가 필요합니다. ✅ ICommand와 RelayCommand ICommand가 언제 등장했는지 알 수는 없지만 View의 사용자 명령(이벤트)을 ViewModel에 전달하기 위해 만들어진 게 아닐까 생각합니다. 다시 말해 WPF의 MVVM 패턴을 위해 존재하는 거죠. Codebehind를 사용한다면 ICommand 역시 사용하지 않아도 됩니다. WPF의 ICommand ICommand는 인터페이스이므로 구현해야합..
저번 포스팅에서는 프로그램이 시작될 때 모든 폴더 구조를 읽어서 트리형태로 미리 만들어두고 이를 TreeView에 Binding 했습니다. 최초 실행 시 시간이 오래 걸린다는 점과 필요 이상의 메모리를 사용한다는 문제가 있습니다. 이를 해결하려면 폴더의 정보가 필요한 시점에 필요한 폴더 정보만 읽어오면 됩니다. ✅ TreeViewItem Expanding Event 결국 폴더를 확장할 때 하위 폴더 목록을 읽어서 현재 폴더(TreeViewItem)의 자식 아이템으로 추가하면 시작할 때 모든 폴더의 정보를 읽을 필요가 없습니다. 그럼 TreeViewItem의 Expanding 이벤트가 발생했을 때 위 내용을 처리하면 됩니다. 안타깝게도 Expanding 이벤트를 MVVM에서 사용하려면 Behavior를 사..
· C#
C#의 Console Application에서 Ctrl+C 를 입력했을 때 특별한 이벤트를 발생시키는 방법입니다. Console에서 구동 중인 Application을 중단할 때 종료 이벤트를 수행하는 것으로 로그 수집 종료, 메모리 반환 등의 코드가 수행되도록 처리하는 것이 일반적입니다. ✅ Console Application - Cancel (Ctrl+C) ConsoleCancelEventHandler using System; class Program { static void Main(string[] args) { Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress); // Ctrl+C 가 발생할 때 까지 무한루프..
· 기타
종종 git에서 commit 또는 push 도중 오류로 git 명령이 동작하지 않는 경우가 있습니다. fatal 에러로 'index.lock 파일이 존재함'과 함께 아래와 비슷한 문구가 나옵니다. Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue. 이럴 때 해결 방법입..
· WPF/xaml
프로젝트 내의 같은 컨트롤에 동일한 Style을 적용하기 위해서 App.xaml에 Style을 정의하면 모든 View에 동일한 Style이 적용됩니다. 예를 들어 A라는 컨트롤의 Style을 App.xaml에 정의하면 어떤 View에서도 A컨트롤은 같은 Style을 적용받습니다. ✅ WPF Global Style App.xaml 이때 style에 key를 정의하지 않아야 합니다. 예전에 Global 스타일이 적용이 안되어서 확인해 보니 붙여 넣기 하면서 key 가 딸려 들어가서 발생한 상황이었습니다. 생각나서 포스팅해봤습니다. ✅ WPF Global Style - 끝
· WPF
StackPanel은 내부의 컨트롤들을 Horizontal 또는 Vertical 상태로 정렬하는 기능을 가진 컨테이너 컨트롤입니다. 유용한 기능을 가진 컨테이너지만 내부의 컨트롤을 동적으로 생성하기 위한 ItemsSource를 가지고 있지 않기 때문에 다른 방법을 사용해야 합니다. ✅ StackPanel과 ItemsControl ItemsControl ItemsControl의 ItemsPanel의 Tamplate로 StackPanel을 지정하고 ItemsControl의 ItemsSource에 ViewModel을 바인딩합니다. ItemsControl.ItemTemplate ItemsControl.ItemTemplate의 DataTemplate로 Label을 정의했습니다. DataTemplate에 정의한 컨..
YUNYUN3915
윤윤, DEV