(持续更新)Xamarin.Forms之DevExpress GridControl的使用技巧
2016-02-26 14:02
561 查看
1.当使用ItemsSource绑定的对象为ObservableCollection<T>的时候,发现当改变Item的Property的时候,相应的Row并没有刷新
官方有一个IBingList接口,ItemsSource实现该接口即可,也有DevExpress官方已实现好的BindingList<T>,与ObservableCollection<T>的作用一样,可以直接替换2.长按GridControl的时候会弹出PopupMenu,怎么完全禁用它?
GridControl.IsColumnMenuEnabled,GridControl.IsGroupRowMenuEnabled,
GridControl.IsRowCellMenuEnabled,
GridControl.IsTotalSummaryMenuEnabled
将上面的四个属性设为false
3.怎么修改PopupMenu的内容
在GridControl事件中有一个PopupMenuCustomization事件该事件是创建菜单的时候触发的,譬如长按Row\Header
根据GridPopupMenuType来判断是哪种类型的菜单,DataRow\GroupRow\Header\TotalSummary
e.Menu.Items就是全部的菜单项了,Item有一个Click事件,这就是点击该Item触发的事件了,默认的Item都有一个默认的Click事件,如果你要重写,必须先删除该事件上的委托,否则会触发两种委托
4.创建自定义Column
GridControl里面有很多定义好的Column,譬如TextColumn ImageColumn DateColumn PickerColumn,但是这些都只是绑定了一个Property,如果要自定义Column,需要用到TemplateColumn<dxg:TemplateColumn FieldName="Weather" Caption="天气" ContentAlignment="Center" IsReadOnly="true"> <dxg:TemplateColumn.DisplayTemplate> <DataTemplate> <Label Text="{Binding Value,Converter={StaticResource WeatherTypeNameConverter},Mode=OneWay}" Style="{StaticResource GridControl_TemplateColumn_LabelStyle}"/> </DataTemplate> </dxg:TemplateColumn.DisplayTemplate> </dxg:TemplateColumn>
FiledName还是填写所需要展示的Model的PropertyName,DataTemplate里面可以通过Path=Value来获取该值
如果特殊情况下,你需要获取整个Model,用Source替换Value就可以了
<Label Text="{Binding Source,Converter={StaticResource DataObjectConverter},Mode=OneWay}" Style="{StaticResource GridControl_TemplateColumn_LabelStyle}"/>
5.如何获取到正确的SelectedDataObject
由于使用的是MVVM模式,在ViewModel中有我绑定的数据源DataList和GridControlSelectedIndex,我获取选中元素的时候是采用DataList[GridControlSelectedIndex]来获取的这是一个错误的用法,由于GridControl的强大,本身就支持数据的排序,但是注意,排序并不会影响DataList里面的顺序,也就是说你排序的时候,GridControlSelectedIndex会发生变化(因为选中元素的位置发生了变化),但是此时的DataList没有发生变化,你这样获取的SelectedDataObject是错误的
另外获取SelectedDataObject对象也不要通过SelectionChanged事件来获取,因为该事件会在SelectedDataObject改变之前就已经触发了,也就是说你获取到的是前面的SelectedDataObject
正确姿势:直接绑定GridControl的SelectedDataObject对象(如果关闭排序功能的话上面那种做法也是可行的)
6.BindingList
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/31/642f4464f189f8ebc4053df337878488.png)
目前所知,List<T>里面的对象的属性修改必须放在主线程中执行
7.DateColumn
DataColumn绑定的元素必须是DateTime类型,不能是String类型,如果是String类型,虽然可以显示(数据为空的时候显示为空),但是在排序的时候,会出现转换失败的错误(即使该字符串可以转换成DateTime类型,v10.2.5)相关文章推荐
- POJ 2754 Similarity of necklaces 2
- OpenGL学习(1)
- Android之USB转串口通信
- 23种设计模式(15):观察者模式
- 一步一步实现一个简单的OS(先小装一下)
- UVA 1660(p380)----Cable TV Network
- 二、我学习的第一个uiautomator从创建到运行结束
- C# winform程序怎么打包成安装项目(图解)
- .Net 大型分布式基础服务架构横向演变概述
- exit()与die()在PHP中的区别
- 微信企业号开发之地理位置获取
- hdu 1171 Big Event in HDU 费用可行性背包 dp
- linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想
- Git分支管理总结
- 缺乏细节的应用,无异于行尸走肉:你不知道的 App 细节设计
- iOS 中有用的开源库
- 通过JS使用Twitter登录自己的网站
- tomcat-maven-plugin问题汇总
- Netezza 存储过程
- ubuntu安装依赖包