如何解决具有动态列的WPF自定义Datagrid
我正在尝试为具有动态列的wpf创建自定义数据网格。我希望在自定义datagrid类中创建所有datagrid组件,并通过其数据源完全自定义。这是我现在拥有的,但是由于某种原因,行被添加了,但是为空。
public class CustomDataGrid : DataGrid
{
public static DependencyProperty CustomSourceProperty =
DependencyProperty.Register(nameof(CustomSource),typeof(ObservableCollection<CustomDataGridItem>),typeof(CustomDataGrid),new PropertyMetadata(DataSourcePropertyChanged));
public ObservableCollection<CustomDataGridItem> CustomSource
{
get { return (ObservableCollection<CustomDataGridItem>)GetValue(CustomSourceProperty); }
set { SetValue(CustomSourceProperty,value); }
}
private static void DataSourcePropertyChanged(DependencyObject sender,DependencyPropertyChangedEventArgs e)
{
var dataGrid = sender as CustomDataGrid;
if (dataGrid != null)
{
dataGrid.DataSourcePropertyChanged(e);
}
}
private void DataSourcePropertyChanged(DependencyPropertyChangedEventArgs e)
{
int itemCount = 0;
//Load Headers
foreach (var customDataGridItem in CustomSource)
{
switch (customDataGridItem.Type)
{
case CustomDataGridColumnType.Text:
this.Columns.Add(new DataGridTextColumn { Header = customDataGridItem.Header,Width = new DataGridLength(1,DataGridLengthUnitType.Star) });
break;
case CustomDataGridColumnType.Button:
Columns.Add(new DataGridTemplateColumn { Header = customDataGridItem.Header,DataGridLengthUnitType.Star) });
break;
case CustomDataGridColumnType.Checkbox:
Columns.Add(new DataGridCheckBoxColumn { Header = customDataGridItem.Header,DataGridLengthUnitType.Star) });
break;
default:
break;
}
itemCount = itemCount < customDataGridItem.Values.Length ?
customDataGridItem.Values.Length :
itemCount;
}
//Load Rows
for (int i = 0; i < itemCount; i++)
{
List<object> objList = new List<object>();
foreach (var customDataGridItem in CustomSource)
{
objList.Add(customDataGridItem.Values[i]);
}
Items.Add(objList);
}
}
}
这是模型类:
public class CustomDataGridItem
{
public CustomDataGridColumnType Type { get; set; }
public string Header { get; set; }
public object[] Values { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。