准备把表格实现改激进
This commit is contained in:
121
Ramitta/winDataGrid.xaml.cs
Normal file
121
Ramitta/winDataGrid.xaml.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using static Ramitta.winDataGrid;
|
||||
|
||||
namespace Ramitta
|
||||
{
|
||||
public partial class winDataGrid : UserControl
|
||||
{
|
||||
public ObservableCollection<
|
||||
Dictionary<string, Dictionary<string, object>?>
|
||||
> Rows
|
||||
{ get; private set; }
|
||||
|
||||
public Dictionary<string,object> Columns=new();
|
||||
|
||||
public winDataGrid()
|
||||
{
|
||||
InitializeComponent();
|
||||
Rows = new();
|
||||
xDataGrid.ItemsSource = Rows;
|
||||
}
|
||||
|
||||
// 定义列类型的枚举
|
||||
public enum ColumnType
|
||||
{
|
||||
Button,
|
||||
CheckBox,
|
||||
ComboBox,
|
||||
TextBox,
|
||||
Label
|
||||
}
|
||||
|
||||
public void AddColumn(string columnName, ColumnType columnType)
|
||||
{
|
||||
DataTemplate dataTemplate = new DataTemplate();
|
||||
DataGridTemplateColumn column = new DataGridTemplateColumn();
|
||||
FrameworkElementFactory? elementFactory=null;
|
||||
Columns.Add(columnName, columnType);
|
||||
switch (columnType)
|
||||
{
|
||||
case ColumnType.Button:
|
||||
elementFactory = new FrameworkElementFactory(typeof(Button));
|
||||
elementFactory.SetBinding(Button.ContentProperty,
|
||||
new Binding($"[{columnName}][Content]") { Mode = BindingMode.TwoWay });
|
||||
break;
|
||||
case ColumnType.CheckBox:
|
||||
elementFactory = new FrameworkElementFactory(typeof(CheckBox));
|
||||
elementFactory.SetValue(CheckBox.IsCheckedProperty,
|
||||
new Binding($"[{columnName}][IsChecked]") { Mode = BindingMode.TwoWay });
|
||||
break;
|
||||
case ColumnType.ComboBox:
|
||||
elementFactory = new FrameworkElementFactory(typeof(ComboBox));
|
||||
elementFactory.SetValue(ComboBox.SelectedIndexProperty,0);
|
||||
|
||||
elementFactory.SetValue(ComboBox.ItemsSourceProperty,
|
||||
new Binding($"[{columnName}][ItemsSource]") { Mode = BindingMode.TwoWay });
|
||||
|
||||
elementFactory.SetValue(ComboBox.SelectedValueProperty,
|
||||
new Binding($"[{columnName}][SelectedValue]") { Mode = BindingMode.TwoWay });
|
||||
|
||||
break;
|
||||
case ColumnType.Label:
|
||||
elementFactory = new FrameworkElementFactory(typeof(Label));
|
||||
elementFactory.SetBinding(Label.ContentProperty,
|
||||
new Binding($"[{columnName}][Content]") { Mode = BindingMode.TwoWay });
|
||||
|
||||
break;
|
||||
case ColumnType.TextBox:
|
||||
elementFactory = new FrameworkElementFactory(typeof(TextBox));
|
||||
elementFactory.SetBinding(TextBox.TextProperty,
|
||||
new Binding($"[{columnName}][Text]") { Mode = BindingMode.TwoWay });
|
||||
|
||||
break;
|
||||
}
|
||||
dataTemplate.VisualTree = elementFactory;
|
||||
column.Header = columnName;
|
||||
column.CellTemplate = dataTemplate;
|
||||
column.CellEditingTemplate = dataTemplate;
|
||||
xDataGrid.Columns.Add( column );
|
||||
}
|
||||
|
||||
public Dictionary<string, Dictionary<string, object>?> AddRow(){
|
||||
var keys = Columns.Keys.ToList();
|
||||
var row = new Dictionary<string, Dictionary<string, object>?> { };
|
||||
|
||||
foreach (var key in keys) {
|
||||
var value = new Dictionary<string, object?> { };
|
||||
switch (Columns[key])
|
||||
{
|
||||
case ColumnType.Button:
|
||||
value.Add("Content","value");
|
||||
break;
|
||||
case ColumnType.CheckBox:
|
||||
value.Add("IsChecked", false);
|
||||
break;
|
||||
case ColumnType.ComboBox:
|
||||
value.Add("ItemsSource", null);
|
||||
value.Add("SelectedValue", null);
|
||||
|
||||
break;
|
||||
case ColumnType.TextBox:
|
||||
value.Add("Text", "value");
|
||||
break;
|
||||
case ColumnType.Label:
|
||||
value.Add("Content", "value");
|
||||
break;
|
||||
}
|
||||
row.Add(key, value);
|
||||
}
|
||||
|
||||
Rows.Add(row);
|
||||
return row;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user