반응형

분류 전체보기 133

[오류해결] Brush - DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다.

WPF에서 Json으로 직렬화와 역직렬화하여 화면에 디스플레이 하다가 UI Thread에선 문제가 없었는데, Task를 태워서 비동기 처리를 하려다 보니 아래와 같은 오류가 발생되었다. DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다. 처음엔 이게 뭐야??? 하면서 내가 사용한 객체들에 대해 뒤져보게 되었다. 일단 DependencyObject가 같은 Thread에서 나와야 한다는것이 일단 Dispatcher를 이용하면 될것이라는 것은 명확했다. 하지만 어느 부분에서?? 라는 것이 문제였다. 워낙 많은 양의 데이터를 역직렬화하다보니 전체를 감싸기도 애매했다. 그래서 객체에 담긴 모든 데이터를 다 확인해보기 시작했다. 뭐 결론은 Brush다. https://..

프로그래밍/WPF 2022.12.21

[WPF] Close popup when mouse leave

Popup에서 StaysOpen을 False로 두면 해당 팝업 컨트롤에서 포커스를 잃으면 알아서 닫힌다. 근데 포커스를 잃을려면 마우스를 누르거나 다양한 방법으로 상호작용을 해야하는데 이것마저 해서는 안되는 경우가 종종있다. 나의 경우는 그냥 팝업 화면에서 마우스만 빠져나가도 팝업이 닫게 하고 싶었다. Behind Code로 작성하면 편하겠지만 MVVM 패턴으론 쉽게하기 어려우니 Behavior를 쓰기로 했다. 일단 Behavior Class를 만들어준다. class ClosePopupBehavior : Behavior { protected override void OnAttached() { AssociatedObject.Child.MouseLeave += Child_MouseLeave; } privat..

프로그래밍/WPF 2022.12.20

[C#] Class & Struct Performance Test

c#에서 사람들은 너무 무자비하게 Class만 사용한다. 하지만 실제 성능은 어떨까? stack과 heap의 차이라 너무 명백한 성능을 차이를 보이지만 똥인지 된장인지 찍어먹어봐야 아는 사람들이 있으니 이것을 보고 주니어를 졸업하도록 하자. https://mdfarragher.medium.com/whats-faster-in-c-a-struct-or-a-class-99e4761a7b76 What Is Faster In C#: A Struct Or A Class? What do you think is faster: filling an array with one million structs, or filling an array with one million classes? mdfarragher.medium.c..

프로그래밍/C# 2022.12.13

[WPF] Binding SelectedItems (ItemsControl, DataGrid 등)

ItemsControl이나 DataGrid 등의 List형 데이터를 Source로 가지는 컨트롤들은 Code behind에서 SelectedItems에 접근할 수 있다. 하지만 Xaml 에서 접근하려고 한다면 SelectedItem 만 접근 가능하다. 자. 이제부터 문제의 시작이다. MVVM 패턴에서 직관적으로 접근하려고 한다면 SelectedItem밖에 Binding 못한다. 하지만 여러개의 Row를 선택하고, 이러한 Row를 이용하여 어떠한 작업을 하려면 다른 방법을 써야한다. DataGrid를 예를 들어 설명하도록 하겠다. Xaml ViewModel // Multi Selection이 발생됬을때 받아올 Property 선언 public List SelectedItems { get; set; } = ..

프로그래밍/WPF 2022.12.07

[WPF] File Drag & Drop MVVM Pattern using Behavior

외부의 파일을 종종 프로그램 내부로 가져와서 쓸때가 있다. 보통은 File Open Dialog등을 이용하여 가져올수도 있지만 그냥 파일 탐색기에서 여러 파일들을 선택해서 Drag & Drop형태로 가져올 때도 있다. 이럴때 Behavior를 이용하여 File Drop을 사용하는 방법을 알아보자. 1. 우선 Drag & Drop의 영역을 선언해주고 Drop을 가능하도록 처리해준다. AllowDrop=True 2. 바인딩할 Behavior 클래스를 만든다. class FileDropBehavior : Behavior { public static readonly DependencyProperty DroppedFilesProperty = DependencyProperty.Register("DroppedFile..

프로그래밍/WPF 2022.12.07

[WPF] Return StaticResource as IValueConverter

XAML 작업을 해보다 보면 특정 값에 따라 StaticResource가 변화시켜야하는 상황들이 있다. 나의 경우에서는 Icon을 DrawingImage로 만들어서 StaticResource로 참조하여 사용하고 있었는데 타입별로 이 Icon이 바뀌어야했다. Type 별로 Image를 선언하고 Visible을 제어하기보단 Source의 내용을 StaticSource의 값을 변화시키는게 더욱 효율적일 것이다. 위와 같이 Image Source에 넣기 위한 IconPerson과 IconCar라는 DrawingImage StaticSource가 있다. public class IconConverter : IValueConverter { public DrawingImage Person { get; set; } pu..

프로그래밍/WPF 2022.12.02

[WPF] ContextMenu Binding in TreeView

TreeView에 있는 데이터를 탐색기처럼 사용할 떄, 각 Item들을 오른쪽 버튼을 눌러 어떠한 작업을 할때가 있다. 이때 보통 ContextMenu를 사용하는데 Command와 CommandParameter를 사용해야하는데 일반적인 방법으론 잘 되지 않는다. 그래서 사용하는 방법이 Tag에 해당 최상위 컨트롤의 DataContext를 바인딩하고, MenuItem에서 Tag를 통해 가지고 오는 방법을 사용한다. 이때 CommandParameter는 오른쪽으로 선택된 아이템이 따라온다.

프로그래밍/WPF 2022.11.28

[WPF] Value Converter Default

아래와 같은 코드가 있다고 하자 여기서 BoolToVisibilityCollapsedConverter는 TrueFalseValue라는 값이 True면 Visible, False면 Collapsed ReverseBoolToVisibilityCollapsedConverter는 반대라고 하자. 코드는 명백히 TextBlock을 선택적으로 보여주길 원한다고 볼 수 있다. 그런데 만약 Model 객체가 Null 이면 어떻게 될까? 그렇게 되면 TextBlock 둘은 동시에 표시될 것이다. 이점을 막기 위해서 FallbackValue를 이용한다. https://learn.microsoft.com/ko-kr/dotnet/api/system.windows.data.bindingbase.fallbackvalue?view..

프로그래밍/WPF 2022.11.04

[WPF] Visibility Control based on ComboBox Selection

ComboBox에서 선택된 값을 바인딩하여 다른 컨트롤을 제어하고 싶을때가 있다. 만약 Visible을 제어한다고 한다면 일반적으로 아래와 같이 생각하기 쉽다. Visible Hidden 하지만 위와 같이 작성하면 안된다. 왜나면 ComboBox에 바인딩할때 SelectedValue나 SelectedItem 등을 바인딩하면 ComboBoxItem을 가져오기 때문이다. 이를 우회하기 위해 Tag를 아래와 같이 이용하는 방법을 사용할 수 있다. Visible Hidden 각 ComboBoxItem에 Tag를 지정해주고, SelectedItem == ComboboxItem 임으로 ComboBoxItem의 Tag를 가져와서 Property를 제어할 수 있다.

프로그래밍/WPF 2022.10.22

[에드센스] 개발자 블로그 수익 및 6개월 후기

블로그는 내 첫 게시글을 확인해보니 2020-08-03 에 시작하여 벌써 2022-10-14일까지 시간이 흘렀다. 사실상 에드센스를 붙여서 수익을 노리고 블로그를 개설한건 아니고 말그대로 에버노트나 노션같은 기록하며 남겨놓는 것을 티스토리에 옴겨두는게 좋겠다라는 생각을 하기 시작했다. 에버노트같은 노트 앱은 내가 개발을 하면서 모르는 것들 혹은 버그들, 그리고 각종 구현 방법들을 정리없이 마구자비로 복사 & 붙여넣기만 한 잡동사니에 불과했고, 잘쓰는 사람들은 정말 정리를 어마어마하게 잘해서 활용도가 매우 높다. 하지만 나는 사실상 그렇게까지 할 자신도 없었고 어느정도 구분만 시켜놓고 글을 올려 놓자라는 생각이였다. (뭐... 사람들이 보는 글이다보니 최소한 정리와 주석이라도 세세하게 달겠지라는 생각이였다..

일상다반사 2022.10.14
반응형