WPF DataTemplateSelector 완전 정복 - 조건에 따라 다른 UI 그리기
WPF에서는 DataTemplate 을 사용하여 View 와 ViewModel을 깔끔하게 분리할 수 있습니다. 그런데 하나의 리스트에 다양한 형태의 데이터가 들어오는 경우, 어떤 템플릿을 써야할까요? 바로 그때 사용하는 게 DataTemplateSelector입니다. 목표 하나의 ListBox에 여러 타입의 아이템 표시 혹은 속성 값에 따...
WPF에서는 DataTemplate 을 사용하여 View 와 ViewModel을 깔끔하게 분리할 수 있습니다. 그런데 하나의 리스트에 다양한 형태의 데이터가 들어오는 경우, 어떤 템플릿을 써야할까요? 바로 그때 사용하는 게 DataTemplateSelector입니다. 목표 하나의 ListBox에 여러 타입의 아이템 표시 혹은 속성 값에 따...
WPF에서 RadioButton 여러 개를 만들고, 선택된 항목을 ViewModel 에서 관리하고 싶을 때, 보통 bool 바인딩을 각각 하게 됩니다. 하지만 이보다는 Enum을 사용해서 하나의 속성으로 관리하는 것이 훨씬 깔끔하고 유지보수에도 유리합니다. 이 글에서는 Enum과 IValueConverter를 이용해 RadioButton 여러 개를 ...
WPF 개발 시, XAML 에서 직접 다른 컨트롤의 속성을 변경하고 싶을 때가 있습니다. 이럴 때 System.Windows.Interactivity 네임스페이스의 Behavior 를 활용하면 코드 비하인드 없이도 이러한 작업이 가능합니다. 목표 Button 클릭 시, ToggleButton 의 IsChecked 속성을 False 로 설정하여 토글 ...
WPF 앱에서 Popup 컨트롤 안에 TextBox를 배치하고 한글을 입력할 때, 자음과 모음이 분리되어 입력되는 현상을 경험하셨나요? 예를 들어, ‘집에가고싶어’를 입력하면 ‘집ㅇㅔㄱㅏㄱㅗㅅㅣㅍ어’처럼 문제가 발생할 수 있습니다. 문제 원인 이 현상은 Popup 이 별도의 윈도우로 생성되기 때문에 IME(입력기)가 제대로 연동되지 않아 발생합니다...
WPF 에서 DataGrid 는 다른 컨트롤보다 커스텀 하기가 어렵다. DataGrid 가 단순한 컨트롤이 아닌 복잡한 컨트롤이기 때문이다. 이번 포스팅에서는 간단한 DataGrid 커스텀에 대해서 포스팅하고자 한다. 기본 DataGrid 기본 DataGrid 생성과 간단한 데이터 입력 한다면 아래와 같다. <Grid> ...
WPF 에서는 IValueConverter 를 사용할 때 매번 리소스로 등록하고 StaticResource 또는 DynamicResource 로 참조하는 방식이 번거롭게 느껴질 수 있습니다. 이럴 때 MarkupExtension을 상속받아 간편하게 XAML에서 직접 사용할 수 있는 Converter를 만들 수 있습니다. 기존 방식의 단점 <...
WPF 앱을 MVVM 구조로 개발할 때, 사용자 입력(키보드/마우스)을 ViewModel 에서 처리하려면 어떻게 해야 할까? 이번 포스팅에서는 KeyBinding / MouseBinding 만으로 가능한 작업과 EventArgs 를 받기 위해 반드시 Behavior 가 필요한 상황을 명확하게 비교해 보여드립니다. 1. KeyBinding &am...
ObservableCollection<T> 은 WPF 에서 데이터 바인딩 시 가장 자주 사용하는 컬렉션입니다. 하지만 아쉽게도 LINQ 나 Where로 필터를 바로 적용할 수는 없어요. 그럴 때 사용하는 것이 바로 CollectionView입니다. 왜 ObservableCollection 에는 Filter 가 없을까 ? Obse...
Project Structure
제가 사용하고 있는 WindowChome Style 전체 코드를 공유합니다. 이 스타일을 Template 으로 만들어 사용하면 빠르고 예쁜 윈도우 사용이 가능합니다. 1. MainWindow.xaml <Window x:Class="WpfMyTemplate1.MainWindow" xmlns="http://schemas.micr...