분류 전체보기 (45) 썸네일형 리스트형 [WPF] DependencyProperty에 대해서 WPF에서 속성과 속성 간의 Binding을 통해 데이터를 View로 가져오거나 ViewModel로 보낼 수 있음을 앞선 글에서 알아보았다. 이러한 Binding이 이뤄지기 위해서는 반드시 필요한 조건이 있는데, Binding 하려는 속성이 DependencyProperty(의존 속성) 여야 한다는 것이다. 보통 컨트롤의 속성과 ViewModel의 속성 간에 Binding을 하는데, 기본적으로 WPF에서 제공하는 컨트롤의 대부분의 속성은 의존 속성으로 구현이 되어 있기 때문에 DependencyProperty에 대한 개념을 알지 못해도 사용할 수 있었다. 아마 DependencyProperty의 존재에 대해 처음 직면하게 되는 경우는 사용자 정의 컨트롤(이하 UserControl)로 데이터 묶음을 Bin.. [WPF] MVVM 디자인 패턴 (3) - ViewModelBase MVVM 디자인 패턴으로 개발을 할 때 필수적인 요소 중 하나로 INotifyPropertyChanged 인터페이스를 구현하는 것이 있다. View와 ViewModel 간에 결합을 낮추면서 데이터를 주고받기 위해서 Binding을 사용하는데, 이 Binding이 데이터가 변화되는 시점을 감지하고 데이터를 가져가기 위해서는 데이터가 변화되었음을 알려줘야 하는 것이다. XAML 코드 상에서 컨트롤의 속성과 ViewModel의 속성을 Binding 하게 되면 내부적으로 속성의 변화를 감지하기 위해 ViewModel의 INotifyPropertyChanged 인터페이스에 선언된 PropertyChanged 이벤트에 감지 메서드를 등록할 것이다. 즉, ViewModel은 INotifyPropertyChanged .. [C#] Thread가 백그라운드에서 살아있을 때 3줄 요약 Thread.IsBackgroud 를 true로 하면 응용프로그램이 종료될 때 스레드가 함께 종료된다. Thread.Abort()는 사용하지 말자. new Thread( myThreadFunc ) { IsBackgroud = true }.Start(); 로 스레드 한 줄 실행 가능. 일정한 동작을 반복하는 무한 루프 형태의 Thread는 응용프로그램이 종료될 때 함께 종료되어야 한다. 그래서 보통 아래와 같이 스레드에서 무한정 도는 루프를 스레드 외부에서 탈출시키기 위한 조건 변수를 매개로 동작을 제어하는 방법을 사용한다. private void button_Start_Click( object sender, EventArgs e ) { new Thread(loop).Start(); } priv.. [C#] 문자열 04 - IsNullOrEmpty(), IsNullOrWhiteSpace() 문자열 판별하기 반드시 필요한 메서드는 아니지만 string 클래스에서는 비교적 코드를 깔끔하게 작성할 수 있도록 몇 가지 종류의 판별 메서드를 제공한다. 1. bool string.IsNullOrEmpty(string) 지정된 문자열이 null이거나 빈 문자열(길이가 0)인 경우 true를, 그렇지 않은 경우 false를 반환한다. void button_Click( object sender, EventArgs e ) { if ( !string.IsNullOrEmpty( textBox1.Text ) ) { MessageBox.Show( textBox1.Text ); } else { MessageBox.Show( "Empty." ); } } // Decompiled String.cs public static bool Is.. [WinForm] Drag & Drop으로 컨트롤과 컨트롤 간에 개체 옮기기 WinForm에서 Drag & Drop으로 파일 끌어다 놓기에 대한 포스팅을 한 적이 있다. [.NET Framework/WinForm] - [WinForm] Drag & Drop으로 파일 가져오기 [WinForm] Drag & Drop으로 파일 가져오기 파일을 마우스로 끌어서 WinForm의 RichTextBox 컨트롤에 가져다 놓으면 파일을 읽어서 내용을 RichTextBox에 출력해주는 프로그램을 만들어본다. 기본적으로 WinForm의 컨트롤은 Drag&Drop에 대한 처리가 구 cs-solution.tistory.com 이번에는 파일 뿐만 아니라 원하는 형식을 지정해서 값을 옮겨다 놓는 방법에 대해 소개하려고 한다. 먼저 WinForm에서 컨트롤과 컨트롤 간의 Drag & Drop은 ItemDra.. [WPF] MVVM 디자인 패턴 (2) 지난 포스트에서 첨부했던 코드를 분석해보자. MVVM 디자인 패턴의 세 가지 핵심 요소를 중점으로 보려고 한다. 1. Binding Binding은 MVVM의 시작이면서 끝이라고 볼 수 있는 가장 중요한 요소이다. 앞서 사용자에게 보여지는 영역인 View와 데이터의 처리 영역인 ViewModel의 관계에 있어 View는 ViewModel을 알지만 ViewModel은 View를 모른다고 설명하였다. 그렇다면 ViewModel에서 이뤄지는 데이터 처리의 결과를 어떻게 View에 나타낼 수 있을까? WPF는 Binding이라는 기술을 통해 View의 요소(컨트롤)와 ViewModel의 속성을 연결하여 데이터를 마치 동기화되듯이 주고받는 기능을 제공한다. 이를 통해 View는 ViewModel의 속성에 별도의 .. [WPF] MVVM 디자인 패턴 (1) MVVM 디자인 패턴에 대해 알아보자. WPF & .NET Framework로 개발한다는 가정하에 설명하려고 한다. MVVM은 Model-View-ViewModel의 약자로 애플리케이션을 구성하는 요소를 모델, 뷰, 뷰 모델의 세 가지 계층으로 분리하여 각 계층 간의 결합도와 상호 의존성을 낮춤으로 분리 개발 및 유지보수에 용이하도록 하기 위한 디자인 패턴이다. 각 계층의 역할에 대한 어려운 설명은 인터넷에 검색하면 많이 나오니 참고하자. 이 글에서는 어려운 용어는 집어치우고 "그래서 각 계층을 도대체 어떻게 나누라는 건데?" 에 대해 생각해보려고 한다. MVVM 디자인 패턴으로 개발을 할 때에 딱 1가지만 기억하자. 뷰는 뷰 모델을 알지만 뷰 모델은 뷰를 알지 못하고, 뷰 모델은 모델을 알지만 모델은 .. [C# Reflection] 런타임에 객체 생성하기 코드상에서는 단순히 MyClass obj = new MyClass()처럼 클래스의 객체를 생성할 수 있다. 런타임에서 어떤 클래스의 객체를 생성하고 싶을 땐 어떻게 해야 할까? 방법 1. Activator.CreateInstance() 인스턴스화 하고자 하는 클래스의 생성자 정보를 정확히 알고 있을 때 쓸 수 있는 방법이다. 제일 간단하다. class MyClass { public MyClass() {} public MyClass(int i) {} } static void Main(string[] args) { var obj = Activator.CreateInstance(typeof(MyClass), 1); } Activator.CreateInstance(Type, params object[]) 메서드.. [C#] 문자열 03 - Trim(), TrimStart(), TrimEnd() 문자열의 시작 또는 끝에서 지정된 문자들을 모두 제거하는 메서드이다. Function Description string Trim(params char[] trimChars) 문자열의 선행과 후행에서 등장하는 지정된 문자 배열의 요소들을 모두 제거한다. string TrimStart(params char[] trimChars) 문자열의 선행에서 등장하는 지정된 문자 배열의 요소들을 모두 제거한다. string TrimEnd(params char[] trimChars) 문자열의 후행에서 등장하는 지정된 문자 배열의 요소들을 모두 제거한다. 세 함수 모두 params 형식의 매개변수를 취하고 있으며, 만약 매개변수가 지정되지 않거나(=null) 빈 배열인 경우 공백 문자를 대신 제거한다. var str = ".. [C#] 문자열 02 - Substring()으로 부분 문자열 가져오기 String.Substring()은 문자열에서 부분 문자열을 가져오는 메서드이다. 1. String.Substring(int startIndex) 문자열의 startIndex 위치부터 문자열의 마지막까지를 새로운 문자열로 생성하여 반환한다. var result = "This is example string.".Substring(6); Console.WriteLine(result);// Output : s is example string. 2. String.Substring(int startIndex, int length) 문자열의 startIndex 위치부터 length 만큼의 문자들을 새로운 문자열로 생성하여 반환한다. var result = "This is example string.".Substri.. 이전 1 2 3 4 5 다음