博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Telerik XML 数据源绑定的问题
阅读量:6934 次
发布时间:2019-06-27

本文共 2786 字,大约阅读时间需要 9 分钟。

Telerik GridView 默认的 XElement 数据源的直接绑定,会导致内置的sort, filter ,group等功能无法使用.

原因在于Telerik GridView的那些功能是根据数据类型实现的,而XElement绑定在数据源本身是无法区分类型的。

一个解决方案是绑定的属性转换为具体的 一个个属性,也就是Telerik 官网所谓的various datasource当中XML的绑定方式

另外一个比较适合实际项目的解决方案是 讲数据源转变为Dynamic数据源,然后将ItemSource绑定到这个Dynamic数据源当中。

别的方式或许也有,我没试验出来.

代码如下:

public void LoadXmlData(XElement data)        {            if (data != null)            {                this.Items = new ObservableCollection
(from element in data.Elements() select new DataRow(ToDictionary(element), element)); } }
private IDictionary
ToDictionary(XElement element) { var dict = new Dictionary
(); foreach (var e in element.Elements()) { dict.Add(e.Name.LocalName, e.Value); } return dict; }  

添加一个转换Dynamic的类:

public class DataRow : DynamicObject, INotifyPropertyChanged    {        readonly IDictionary
data; //public XElement ItemXml { get; set; } public DataRow(IDictionary
source,XElement item) { data = source; //Item = item; } public override IEnumerable
GetDynamicMemberNames() { return data.Keys; } public override bool TryGetMember(GetMemberBinder binder, out object result) { result = this[binder.Name]; return true; } public override bool TrySetMember(SetMemberBinder binder, object value) { this[binder.Name] = value; return true; } public object this[string columnName] { get { if (data.ContainsKey(columnName)) { return data[columnName]; } return null; } set { if (!data.ContainsKey(columnName)) { data.Add(columnName, value); OnPropertyChanged(columnName); } else { if (data[columnName] != value) { data[columnName] = value; OnPropertyChanged(columnName); } } } } private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion }

  

转载于:https://www.cnblogs.com/Juniph/p/4253327.html

你可能感兴趣的文章
AppDynamics把业务交易跟踪扩展到SAP环境
查看>>
历时三年,美图全面容器化踩过的坑
查看>>
2018年终盘点:我们处在一个什么样的技术浪潮当中?
查看>>
IBM发布全球首台商用量子计算机
查看>>
在一个成熟的分布式系统中 如何下手做高可用?
查看>>
CoreOS 和 Kubernetes 1.5 自主运行 Kubernetes、Container Linux
查看>>
The only supported ciphers are AES-128-CBC and AES-256-CBC
查看>>
sphinx 全文搜索引擎
查看>>
Kotlin成为正式的Android编程语言
查看>>
物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用
查看>>
微软必应从.NET Core 2.1获得了性能提升
查看>>
四说大数据时代“神话”:从大数据到深数据\n
查看>>
vue.js仿饿了么app---webpack配置项
查看>>
架构周报:微信后台系统的演进之路
查看>>
Oracle宣布提供新的Java支持价格体系
查看>>
phpstrom配置svn/git提交
查看>>
关于Redux的一些总结(一):Action & 中间件 & 异步
查看>>
专访1药网技术副总裁黄哲铿:揭秘技术跨界管理之道
查看>>
Markdown通用的常用语法说明
查看>>
gulp关于scss的基础配置
查看>>