当前位置: 首页 > news >正文

C# WPF DataGrid 内容绑定时的单元格编辑类型模板

DataGrid的DataSource绑定的ObservableCollection<UserType>属性如果在运行中会发生变动,则不能在xaml手动定义Columns,否则当该属性发生变动时,UI不会随之更新,需要使用以下方法来实现单元格编辑类型的替换:

一、

设置DataGrid的AutoGenerateColumns为True,自动生成列的同时在AutoGeneratingColumn事件的方法将e.Column属性替换为DataGridTemplateColumn实例。

xaml:

    

cs:

      private void DataGridAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e){DataGrid dataGrid = sender as DataGrid;string columnName = e.PropertyName;DataGridTemplateColumn column = new DataGridTemplateColumn();e.Column = column;}

在定义的DataGridTemplateColumn实例的CellTemplate和CellEditingTemplate属性赋值新的DataTemplate实例, 创建FrameworkElementFactory实例给DataTemplate实例的VisualTree赋值;FrameworkElementFactory实例可以使用SetBinding方法绑定数据源,使用SetValue方法指定模板,模板可定义在App.xaml里,通过Application.Current.FindResource方法获取。

 DataGridTemplateColumn column = new DataGridTemplateColumn();DgvCellDataTemplateSelector cellTemplate = Application.Current.FindResource("DgvCellTemplateSelector") as DgvCellDataTemplateSelector;DgvCellDataTemplateSelector cellEditingTemplate = Application.Current.FindResource("DgvCellEditingTemplateSelector") as DgvCellDataTemplateSelector;column.Header = columnName;column.CellTemplate = new DataTemplate();FrameworkElementFactory factory = new FrameworkElementFactory(typeof(ContentPresenter));factory.SetBinding(ContentPresenter.ContentProperty, new Binding(columnName));factory.SetValue(ContentPresenter.ContentTemplateSelectorProperty, cellTemplate);column.CellTemplate.VisualTree = factory;column.CellEditingTemplate = new DataTemplate();FrameworkElementFactory editingfactory = new FrameworkElementFactory(typeof(ContentPresenter));editingfactory.SetBinding(ContentPresenter.ContentProperty, new Binding(columnName));editingfactory.SetValue(ContentPresenter.ContentTemplateSelectorProperty, cellEditingTemplate);column.CellEditingTemplate.VisualTree = editingfactory;

二、

编写模板选择器,DgvCellDataTemplateSelector是个实现了DataTemplateSelector接口的类型:

public class TemplateMapping : List
{
}
public class TemplateMappingItem
{public object Value { get; set; }public DataTemplate Template { get; set; }
}
public class DgvCellDataTemplateSelector : DataTemplateSelector
{public DataTemplate DefaultTemplate { get; set; }public TemplateMapping TemplateMap { get; set; }public override DataTemplate SelectTemplate(object item, DependencyObject container){if (item == null) return DefaultTemplate;if (item is DataBase data){if (data == null) return DefaultTemplate;return TemplateMap?.Find(m => Equals(m.Value, data.dataType))?.Template ?? DefaultTemplate;}return DefaultTemplate;}
}

三、

定义模板和创建全局模板选择器实例,app.xaml:


四、

创建存放数据的UserType。

  public enum DataType{Readonly}public abstract class DataBase : NotifyPropertyChanged,ICloneable{private object value;public DataType dataType;public object Value { get { return value; } set { this.value = value;OnPropertyChanged(nameof(Value)); } }public DataBase() { }public abstract object Clone();}public class ReadOnlyData : DataBase{public ReadOnlyData(){dataType = DataType.Readonly;}public override object Clone(){var clone = new ReadOnlyData{Value = this.Value};return clone;}}
http://www.gsyq.cn/news/28380.html

相关文章:

  • 别再说我不懂Node流了
  • 详细介绍:K8s中的键值对
  • 权威调研榜单:湿式静电除尘设备生产厂家TOP3榜单好评深度解析
  • 完整教程:机器人中的电机与扭矩入门
  • latex 插图图片代码
  • CF 2132 E. Arithmetics Competition
  • 2025年质量好的海水淡化反渗透膜,高压反渗透膜厂家最新权威推荐榜
  • 2025年口碑好的园林修剪机推荐TOP品牌企业
  • fastadmin项目的nginx的配置
  • HC32F472
  • 2025年比较好的超强承重天地铰链,隐藏天地铰链厂家最新推荐排行榜
  • 2025年比较好的反弹插入门厂家最新推荐榜
  • 2025年口碑好的滚筒筛土机推荐生产厂家
  • 2025年评价高的全品类全屋五金厂家推荐及选择建议
  • 2025 年折弯机厂家最新推荐排行榜:聚焦数控 / 电液伺服 / 液压等机型,精选企业助您精准采购
  • 2025年可靠的直流温升试验机厂家推荐及选择建议
  • 2025年耐用的五谷杂粮超微粉碎机,牧草超微粉碎机推荐生产厂家
  • Edge设置黑夜模式
  • C# 界面美化实战:从基础控件到现代设计
  • 2025年诚信的混凝土水沟滑模机厂家推荐及选择指南
  • 2025年专业的煤炭化验设备最新TOP排名厂家
  • 2025年知名的开门式厨房拉篮厂家推荐及采购指南
  • 2025年优质的冷弯成型机,波形板冷弯机厂家最新推荐排行榜
  • 2025年10月塑料制品生产厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 详细介绍:使用ffmpeg8.0的whisper模块语音识别
  • 2025年知名的不锈钢五金铰链,厚薄门通用五金铰链厂家最新推荐榜
  • 2025 年最新推荐 AI 写作工具排行榜:助力自媒体高效创作,解决内容痛点的优质平台汇总原创 AI 写作/高性价比 AI 写作/在线 AI 写作/高效 AI 写作软件推荐
  • 2025年正规的制氮机推荐生产厂家
  • 2025实测:这10款项目进度管理软件真是用劲了,跨部门同步率从45%飙到92%!
  • Securing Your DevOps Pipelines - 2