반응형

C# 49

[WPF] 이벤트: PreviewMouseDown과 MouseDown의 차이

WPF에서 마우스 이벤트는 두 가지 주요 유형으로 나뉩니다: PreviewMouseDown과 MouseDown. 이 두 이벤트는 이벤트 라우팅 방식에서 중요한 차이를 가지고 있습니다. 이번 포스트에서는 이 두 이벤트의 차이점과 실행 순서를 살펴보겠습니다. 이벤트 라우팅 방식1. PreviewMouseDown:터널링 단계에서 발생합니다. 즉, 이벤트가 부모 요소에서 자식 요소로 전파됩니다.2. MouseDown:버블링 단계에서 발생합니다. 즉, 이벤트가 자식 요소에서 부모 요소로 전파됩니다. 실행 순서이벤트가 발생할 때의 실행 순서는 다음과 같습니다:부모 PreviewMouseDown ↓자식 PreviewMouseDown ↓자식 MouseDown ↓부모 MouseDown 예제 코..

프로그래밍/WPF 2024.11.18

[WPF] DataGrid 가상화와 ComboBox SelectedItem 불일치 문제 해결: MVVM 패턴에서의 효율적인 접근 방법

WPF(Windows Presentation Foundation)에서 DataGrid는 대량의 데이터를 효율적으로 표시하기 위한 강력한 컨트롤입니다. 그러나 가상화(Virtualization)를 사용할 때 ComboBox와 같은 편집 컨트롤을 포함하면 예상치 못한 문제가 발생할 수 있습니다. 특히, MVVM 패턴을 사용하는 경우에는 이러한 문제가 더욱 복잡해질 수 있습니다. 이번 글에서는 DataGrid의 가상화로 인해 발생하는 ComboBox의 SelectedItem 불일치 문제를 분석하고, MVVM 패턴을 유지하면서 이를 해결하는 방법을 소개하겠습니다. 문제 상황DataGrid에 가상화를 적용하고 각 행(Row)에 ComboBox를 포함시켰을 때, SelectedIndex가 -1인 경우 ComboBo..

프로그래밍/WPF 2024.10.15

[C#] Task.Yield 사용법 및 활용 예제

비동기 프로그래밍은 현대 소프트웨어 개발에서 매우 중요한 역할을 합니다. 특히 UI 응용 프로그램에서는 긴 작업이 UI 스레드를 차단하지 않도록 하여 사용자 경험을 향상시키는 것이 필수적입니다. 이번 포스트에서는 Task.Yield를 사용하여 비동기 작업 중에 UI 응답성을 유지하는 방법에 대해 알아보겠습니다.Task.Yield란 무엇인가?Task.Yield는 C#에서 제공하는 비동기 메서드로, 현재 실행 중인 스레드를 일시적으로 양보하고 이후에 다시 제어를 반환받을 수 있게 합니다. 이 메서드는 주로 UI 응용 프로그램이나 비동기 코드에서 긴 작업이 UI 스레드를 차단하지 않도록 하기 위해 사용됩니다.Task.Yield를 호출하면 await 키워드와 함께 사용되어 현재 실행 중인 작업을 일시적으로 중단..

프로그래밍/C# 2024.09.03

[C#] C#에서 사각형 내에 포함된 선 추출하기

안녕하세요, 여러분! 오늘은 C#을 사용하여 주어진 사각형 영역 내에 포함된 선(Line) 데이터를 추출하는 방법에 대해 알아보겠습니다. 또한 사각형 영역에 걸쳐 있는 선을 자르는 방법도 다룰 것입니다. 문제 정의우리는 x, y 좌표계에 다수의 선(Line) 데이터를 가지고 있습니다. 주어진 사각형(Rect) 영역 내에 존재하는 선 데이터를 추출하는 프로그램을 작성해야 합니다. 만약 사각형 영역에 완전히 포함되지 않고 걸쳐 있는 선이 있는 경우, 선을 잘라서 영역 내만 포함되도록 변경하여 추출해야 합니다. 단계별 구현1. 데이터 구조 정의먼저, 포인트(Point), 라인(Line), 사각형(Rect) 구조체를 정의합니다.public struct Point{ public double X { get; ..

프로그래밍/C# 2024.08.07

[C#] Extension 메소드 사용하기

C# 프로그래밍에서 Extension 메소드(확장 메소드)는 기존의 타입에 새로운 메소드를 추가할 수 있게 해주는 강력한 기능입니다. 이 기능은 특히 기존 라이브러리나 프레임워크를 수정하지 않고도 해당 타입의 기능을 확장하고 싶을 때 유용합니다. 1. Extension 메소드란 무엇인가?Extension 메소드는 정적 메소드로 선언되지만, 특정 타입의 인스턴스 메소드처럼 사용될 수 있습니다. 이 메소드는 this 키워드를 사용해 첫 번째 파라미터에 기존 타입을 명시함으로써 해당 타입의 인스턴스에 대해 호출할 수 있게 됩니다.2. Extension 메소드 구현 방법Extension 메소드를 구현하려면 다음과 같은 단계를 따르세요:정적 클래스 생성: Extension 메소드는 정적 클래스 내부에 정의되어야 ..

프로그래밍/C# 2024.05.08

[WPF] DataGrid 행 더블 클릭 시 Command 실행하기

WPF에서 MVVM 패턴을 사용하는 경우, DataGrid의 행을 더블 클릭할 때 특정 Command를 실행하고자 할 수 있습니다. 이 작업을 수행하기 위해서는 Interaction.Behaviors를 활용하는 것이 일반적입니다. 오늘은 DataGrid 행 더블 클릭에 Command를 연결하고 CommandParameter로 선택된 행의 아이템을 전달하는 방법을 살펴보겠습니다. 1단계: Behavior 클래스 생성 먼저, 행 더블 클릭 시 실행할 Behavior 클래스를 생성해야 합니다. 이 클래스는 System.Windows.Interactivity.Behavior를 상속받아야 합니다. 그리고 Command와 CommandParameter를 DependencyProperty로 선언하여, XAML에서 B..

프로그래밍/WPF 2023.11.03

[WPF] HelixToolkit.Wpf.SharpDX 사용하여 3D 공간에서 마우스 드래그로 선택 영역 그리기

3D 모델링 및 시각화 툴을 개발하다 보면 사용자가 마우스로 드래그하여 특정 영역을 선택하는 기능을 구현할 필요가 종종 있습니다. 이번 글에서는 WPF와 HelixToolkit.Wpf.SharpDX를 사용하여 3D 공간에서 마우스 드래그로 선택 영역을 그리는 방법에 대해 알아보겠습니다. 개요 사용자가 마우스 왼쪽 버튼을 클릭하고 드래그하면, 그림자 박스 형태로 선택 영역을 화면에 표시합니다. 이 기능은 3D 모델링 툴에서 객체를 선택하거나, 특정 영역에 대한 작업을 수행할 때 유용하게 사용됩니다. 준비 먼저, WPF 프로젝트를 생성하고, NuGet 패키지 관리자를 통해 HelixToolkit.Wpf.SharpDX를 설치합니다. 코드 구현 디자인 필드 정의 private Vector3 startDragPo..

프로그래밍/WPF 2023.10.30

[C#] SkipWhile & TakeWhile

C# LINQ: SkipWhile과 TakeWhile 메서드 깊게 알아보기 안녕하세요! 오늘은 C#의 LINQ 메서드 중 SkipWhile과 TakeWhile에 대해 자세히 알아볼 것입니다. 이 두 메서드는 데이터 컬렉션을 효과적으로 쿼리하는 데 아주 유용합니다. LINQ란? LINQ (Language Integrated Query)는 데이터 컬렉션에 쿼리를 실행하기 위한 표준화된 방법을 제공하는 C#의 특징 중 하나입니다. LINQ는 다양한 데이터 소스 (예: 배열, 리스트, 데이터베이스)에 작동하도록 설계되었습니다. SkipWhile 메서드 SkipWhile은 주어진 조건이 참인 동안의 컬렉션 요소들을 건너뛰고, 그 이후의 요소들을 반환합니다. List numbers = new List { 1, 2,..

프로그래밍/C# 2023.08.18

[C#] 디자인 패턴 - Builder Pattern

Builder Pattern은 복잡한 객체의 생성을 단순화하기 위한 디자인 패턴입니다. 객체의 생성과 표현을 분리함으로써 동일한 생성 절차에서 서로 다른 표현 결과를 얻을 수 있습니다. 기본 구조 Builder Pattern은 주로 다음 구성 요소로 이루어져 있습니다: Builder: 생성될 객체의 각 부분의 생성과 조립 방법을 정의하는 추상 인터페이스입니다. ConcreteBuilder: Builder의 인터페이스를 구현하는 클래스로, 실제 제품의 구체적인 표현을 정의합니다. Director: Builder 인터페이스의 사용 방법을 정의합니다. Product: 생성될 복잡한 객체를 나타냅니다. 언제 사용해야 하는가? 복잡한 객체의 생성 절차와 그 표현을 분리하고 싶을 때 동일한 생성 절차에서 서로 다른..

프로그래밍/C# 2023.08.15

[C#] 디자인패턴 - Abstract Factory Pattern

Abstract Factory Pattern은 연관된 객체들의 그룹 또는 의존 객체들의 집합을 생성하기 위한 인터페이스를 제공합니다. 이는 상호 교환 가능한 객체 집합을 생성하는 것을 목표로 하며, 객체 생성의 구체적인 클래스를 숨긴 채 각 집합의 공통된 테마나 속성에 따라 객체를 생성합니다. 기본 구조 Abstract Factory Pattern은 주로 다음 구성 요소로 이루어져 있습니다 AbstractFactory: 모든 구체 팩토리의 공통 인터페이스입니다. ConcreteFactory: 실제 객체 집합을 생성하는 구체적인 팩토리입니다. AbstractProduct: 생성되는 제품의 공통 인터페이스입니다. ConcreteProduct: 실제 생성되는 제품입니다. 언제 사용해야 하는가? 시스템이 제품 ..

프로그래밍/C# 2023.08.15
반응형