WPF DataGrid: 열 수를 동적으로 바인딩
질문:
WPF 애플리케이션은 가변 개수의 열이 포함된 데이터세트를 생성하며, 필수 열 설명이 출력에 포함됩니다. 프로그래밍 방식으로 열을 생성하는 코드에는 문자열 형식을 사용한 바인딩이 포함됩니다. 예:
dataGrid.Columns.Add(new DataGridTextColumn { Header = data.ColumnDescriptions[i].Name, Binding = new Binding(string.Format("[{0}]", i)) });
목표는 이 코드를 XAML 파일의 데이터 바인딩으로 바꾸는 것입니다.
해결책:
DataGrid의 Columns 속성은 읽기 전용이므로 직접 바인딩할 수 없습니다. 그러나 BindableColumns라는 추가 속성을 해결 방법으로 사용할 수 있습니다.
public class DataGridColumnsBehavior { // 附加属性,绑定到DataGridColumn集合 public static readonly DependencyProperty BindableColumnsProperty = DependencyProperty.RegisterAttached("BindableColumns", typeof(ObservableCollection<DataGridColumn>), typeof(DataGridColumnsBehavior), new UIPropertyMetadata(null, BindableColumnsPropertyChanged)); }
XAML 파일에서 BindableColumns 속성을 열 컬렉션에 바인딩합니다.
<DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid>
public ObservableCollection<DataGridColumn> ColumnCollection { get; private set; }
바인딩된 컬렉션이 변경되면 BindableColumnsPropertyChanged 메서드는 Columns 속성을 업데이트합니다.
private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { DataGrid dataGrid = source as DataGrid; // 获取DataGrid实例 // 清除现有列 dataGrid.Columns.Clear(); ObservableCollection<DataGridColumn> columns = e.NewValue as ObservableCollection<DataGridColumn>; if (columns == null) { return; } // 添加新列 foreach (DataGridColumn column in columns) { dataGrid.Columns.Add(column); } // 处理集合更改 columns.CollectionChanged += (sender, e2) => { // ... 处理集合变化,例如重新绑定列 dataGrid.Columns.Clear(); foreach (DataGridColumn column in columns) { dataGrid.Columns.Add(column); } }; }
이 메서드는 컬렉션 변경 사항(추가, 삭제, 교체)을 수신하고 이에 따라 Columns 속성을 업데이트합니다. BindableColumnsPropertyChanged
메서드에서는 dataGrid
인스턴스 획득이 추가되고 컬렉션 변경 이벤트가 더 완벽하게 처리되어 열 업데이트가 동기화된다는 점에 유의해야 합니다.
위 내용은 WPF DataGrid에 동적 개수의 열을 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!