栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将WPF DataGrid绑定到可变数量的列?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将WPF DataGrid绑定到可变数量的列?

这是DataGrid中的绑定列的解决方法。由于Columns属性是ReadOnly,就像每个人都注意到的那样,我创建了一个名为BindableColumns的Attached属性,该属性每次通过CollectionChanged事件更改集合时都会更新DataGrid中的Columns。

如果我们有这个DataGridColumn的集合

public ObservableCollection<DataGridColumn> ColumnCollection{    get;    private set;}

然后我们可以像这样将BindableColumns绑定到ColumnCollection

<DataGrid Name="dataGrid"          local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}"          AutoGenerateColumns="False"          ...>

附加属性BindableColumns

public class DataGridColumnsBehavior{    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)    {        DataGrid dataGrid = source as DataGrid;        ObservableCollection<DataGridColumn> columns = e.NewValue as ObservableCollection<DataGridColumn>;        dataGrid.Columns.Clear();        if (columns == null)        { return;        }        foreach (DataGridColumn column in columns)        { dataGrid.Columns.Add(column);        }        columns.CollectionChanged += (sender, e2) =>        { NotifyCollectionChangedEventArgs ne = e2 as NotifyCollectionChangedEventArgs; if (ne.Action == NotifyCollectionChangedAction.Reset) {     dataGrid.Columns.Clear();     foreach (DataGridColumn column in ne.NewItems)     {         dataGrid.Columns.Add(column);     } } else if (ne.Action == NotifyCollectionChangedAction.Add) {     foreach (DataGridColumn column in ne.NewItems)     {         dataGrid.Columns.Add(column);     } } else if (ne.Action == NotifyCollectionChangedAction.Move) {     dataGrid.Columns.Move(ne.OldStartingIndex, ne.NewStartingIndex); } else if (ne.Action == NotifyCollectionChangedAction.Remove) {     foreach (DataGridColumn column in ne.OldItems)     {         dataGrid.Columns.Remove(column);     } } else if (ne.Action == NotifyCollectionChangedAction.Replace) {     dataGrid.Columns[ne.NewStartingIndex] = ne.NewItems[0] as DataGridColumn; }        };    }    public static void SetBindableColumns(DependencyObject element, ObservableCollection<DataGridColumn> value)    {        element.SetValue(BindableColumnsProperty, value);    }    public static ObservableCollection<DataGridColumn> GetBindableColumns(DependencyObject element)    {        return (ObservableCollection<DataGridColumn>)element.GetValue(BindableColumnsProperty);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/597001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号