> 백엔드 개발 > C++ > WPF DataGrid에 동적 개수의 열을 바인딩하는 방법은 무엇입니까?

WPF DataGrid에 동적 개수의 열을 바인딩하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-22 08:33:13
원래의
212명이 탐색했습니다.

How to Bind a Dynamic Number of Columns to a WPF DataGrid?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿