zoukankan      html  css  js  c++  java
  • (持续更新)Xamarin.Forms之DevExpress GridControl的使用技巧

    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事件

    该事件是创建菜单的时候触发的,譬如长按RowHeader

    根据GridPopupMenuType来判断是哪种类型的菜单,DataRowGroupRowHeaderTotalSummary

    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

    目前所知,List<T>里面的对象的属性修改必须放在主线程中执行

    7.DateColumn

    DataColumn绑定的元素必须是DateTime类型,不能是String类型,如果是String类型,虽然可以显示(数据为空的时候显示为空),但是在排序的时候,会出现转换失败的错误(即使该字符串可以转换成DateTime类型,v10.2.5)

  • 相关阅读:
    Creating fields using CSOM
    WCF Misconfiguration: Security Not Enabled
    WCF Misconfiguration: Insufficient Audit Failure Handling
    ASP.NET Misconfiguration: Excessive Session Timeout
    ASP.NET Misconfiguration: Missing Error Handling
    ASP.NET Misconfiguration: Request Validation Disabled
    ASP.NET Misconfiguration: Debug Information
    MIME Sniffing
    web.config中的HttpCookie.HttpOnly属性
    How to: Convert Between Various String Types
  • 原文地址:https://www.cnblogs.com/yz1311/p/5220214.html
Copyright © 2011-2022 走看看