WPF DataGrid에서 열을 동적으로 바인딩하는 방법
WPF DataGrid는 강력한 표 형식 데이터 표시 컨트롤이지만 열 개수가 가변적인 데이터 소스의 경우 처리 방법이 직관적이지 않습니다. 이 문서에서는 XAML의 데이터 바인딩을 사용하여 이 기능을 구현하는 방법을 살펴봅니다.
문제 설명
간단한 예에는 Data
객체 목록(열 메타데이터용)과 2D 배열 ColumnDescription
(실제 데이터용)을 포함하는 Rows
이라는 클래스가 있습니다. 이 데이터를 WPF DataGrid에 바인딩하고 싶지만 ColumnDescription
개체를 기반으로 열을 동적으로 생성해야 합니다.
코드 솔루션
현재 코드에서는 for 루프를 사용하여 프로그래밍 방식으로 열을 추가하지만 데이터 바인딩 및 연결된 속성을 사용하여 XAML에서 선언적으로 동일한 결과를 얻을 수 있습니다.
추가 속성:
BindableColumns
을 값으로 받아들이는 ObservableCollection<DataGridColumn>
이라는 추가 속성을 정의합니다. 이 속성은 ObservableCollection
가 변경될 때 DataGrid의 Columns
컬렉션을 업데이트하는 역할을 담당합니다.
<code class="language-csharp">public class DataGridColumnsBehavior { // 附加属性,用于将 DataGridColumns 集合绑定到目标元素上的属性 public static readonly DependencyProperty BindableColumnsProperty = DependencyProperty.RegisterAttached("BindableColumns", typeof(ObservableCollection<DataGridColumn>), typeof(DataGridColumnsBehavior), new UIPropertyMetadata(null, BindableColumnsPropertyChanged)); private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { // 为简洁起见,省略实现 } }</code>
XAML 바인딩:
ObservableCollection<DataGridColumn>
을 만들고 BindableColumns
연결된 속성을 DataGrid의 Columns
속성으로 설정합니다.
<code class="language-xml"><DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid></code>
이벤트 처리:
연결된 속성의 BindableColumnsPropertyChanged
핸들러에서 기존 열을 지우고 ObservableCollection
에서 새 열을 추가하고 CollectionChanged
이벤트를 구독하여 향후 변경 사항을 처리합니다.
이 접근 방식을 사용하면 데이터 변경 사항에 따라 DataGrid의 열을 동적으로 관리할 수 있으며 열 코드를 수동으로 생성할 필요가 없습니다.
위 내용은 WPF DataGrid에 열을 동적으로 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!