본문 바로가기

C#

WPF Method Binding Extension for MVVM Introduction WPF를 이용해 MVVM패턴으로 개발할때 데이터는 DataBinding을 사용자 입력은 Command를 사용해 View와 ViewModel을 느슨하게 연결합니다. 이것만으로도 충분히 디자인 코드와 로직 코드를 효과적으로 나눌 수 있기 때문에 많이 사용되고 있지만 Command로는 처리하기 까다롭거나 Command를 제공하지 않고 이벤트로만 제공되는 기능을 처리할 때(ex. MouseEvent, SelectionEvent 등)는 View와 ViewModel의 경계가 모호해져 완벽한 분리를 하기가 어렵습니다. (Trigger와 Action을 이용해 일부 EventTrigger와 InvokeCommandAction을 통해 Event를 Command로 전달 할 수 있지만, 각 Event에.. 더보기
Improving WPF Application startup time using Winform Splash Screen Intorduction WPF Application을 개발하다보면 시간이 흐를 수록 프로그램 규모가 점점 커지면서 프로그램 구동시간이 점점 느려지는 현상이 있습니다. 구동시간이 느린 원인으로는 크게 2가지가 있는데 , 첫번째는 짐작하고 있듯이 MainWindow를 띄우기 전에 프로그램에서 필요한 여러가지 정보를 로드하기 위한 과정때문에고, 두번째는 WPF가 시스템에서 사용하기 위해 준비하는 과정이 느린 경우입니다. 로드할 데이터가 많다면 Splash Screen을 띄워놓고, 데이터를 비동기로 로드하는 방식을 통해 사용자로 하여금 기다릴 수 있는 UX를 제공해 줄 수 있지만, 여전히 WPF가 준비되는데까지 걸리는 시간을 해결하지는 못합니다. 그래서 이번시간에는 WPF에 비해 준비과정이 필요없는 Winfor.. 더보기
WPF FlagTrigger(Enum Data Trigger) Introduction WPF Application을 개발할 때 XAML에서 값에 따라 속성를 바꾸거나 Animation을 시작하려고 할때 Trigger를 사용합니다. Trigger에는 종류가 여러가지가 있는데, 그중 DataTrigger는 Binding결과값에 따라 Setter를 처리하는 기능을 가지고 있습니다. DataTrigger는 기본적으로 Binding결과의 1:1매칭만 결과에 의존해 Setter를 처리하는데, 이렇게 되면 Enum데이터에 OR 연산으로 입력되어있는(Flag형태로되어 있는)데이터를 처리하기 위해서는 Converter를 사용해 처리하거나 DataTrigger부분을 두번 사용해야 합니다. 이번시간에는 DataTrigger를 이용해 Flag에 대응할 수 있는 FlagTrigger를 구.. 더보기
WPF StaticMethod Markup Extension Introduction WPF에서는 효율적인 XAML개발을 위해 여러가지 MarkupExtension을 제공합니다. Binding이나 StaticResource, DynamicResource가 대표적인 인데요. 기본적으로 제공되지 않는 기능의 경우 직접 MarkupExtension을 개발 할 수도 있습니다. 이번시간에는 XAML단에서 Static Method에 접근이 필요한 경우를 위해 StaticMethod MarkupExtension을 구현하는 방법에 대해 소개합니다. Create StaticMethodExtension public class StaticMethodExtension : MarkupExtension { public string Method { get; set; } public Stati.. 더보기
ValueSelector MarkupExtension Introduction WPF에서 Binding결과값을 다른 값으로 변환하기 위해 Converter를 사용합니다. 일반적으로 Converter를 구현하기 위해 개발자는 IValueConverter를 상속받은 객체를 구현하고 리소스로 등록하여 사용합니다. 아래 코드는 ValueConverter를 이용해 Slider의 Value에 따라 TextBlock의 FontSize를 변환하는 샘플 코드입니다. 그런데 필요에 따라 Converter를 매번 구현하게 되면 필요 이상으로 Converter를 위한 Type 이 너무 많아지는 상황이 발생합니다. 이렇게 되면 Converter의 경우 XAML코드가 아니기 때문에 관리상으로도 어려움을 격게 됩니다. 이번시간에는 단순한 값 변환을 위해 ValueConverter를 이.. 더보기