zoukankan      html  css  js  c++  java
  • Xamarin.Forms 属性不定、支持首行列头可以锁定的自制DataGrid

    问题1 动态对象加载,列数量不固定

    定义一个超长属性类型 通过反射赋值
    绑定给ListView 里面嵌套一个Grid
    ListView BindingContextChanged Grid动态加载列和内容

    public class HistoricalDataModel
        {
            public List<TransducerParam> ModelList = new List<TransducerParam>();
            public DateTime NDate { get; set; }
            #region
            public TransducerParam D1 { get; set; }
            public TransducerParam D2 { get; set; }
            public TransducerParam D3 { get; set; }
            public TransducerParam D4 { get; set; }
            public TransducerParam D5 { get; set; }
            public TransducerParam D6 { get; set; }
            public TransducerParam D7 { get; set; }
            public TransducerParam D8 { get; set; }
            public TransducerParam D9 { get; set; }
            public TransducerParam D10 { get; set; }
            #endregion
            public HistoricalDataModel(List<TransducerParam> modelList)
            {
                int i = 1;
                modelList.ForEach(x => {
                    TransducerParam tParam = x.Copy();
                    typeof(HistoricalDataModel).GetProperty("D" + i).SetValue(this, tParam);
                    ModelList.Add(tParam);
                    if(x.Name == "nDate")
                        NDate = DateTime.FromOADate(x.Value);
                });
            }
    
        }

    问题2 如何锁定列头和首行 并跟随数据滚动
    列头单独用一个grid,首行单独用一个ListView

    分成4个区间
    1 左上固定长度 首行的列名,
    2 右上 其他列名grid 外层套ScrollView
    3 左下 首类所有数据行 外层套ScrollView
    4 右下 其他列所有数据行 外层套ScrollView
    注意宽度上下对齐
    ScrollView的Scrolled事件,控制其他ScrollView同步滚动

    private void bodyScrollView_Scrolled(object sender, ScrolledEventArgs e)
            {
                headScrolView.ScrollToAsync(e.ScrollX, headScrolView.ScrollY, false);
                rowScrollView.ScrollToAsync(rowScrollView.ScrollX, e.ScrollY, false);
                statisticsScrolView.ScrollToAsync(e.ScrollX, statisticsScrolView.ScrollY, false);
            }

    问题3 ScrollView内嵌套的ListView WebView之类带滚轮的内容,滚轮效果失效
    加载数据后,根据数据内容大小 将控件的长宽按最大显示数据的长宽定义。
    //列宽定义120 ,Margin="0" RowSpacing="0" ColumnSpacing="0"
    dataListView.WidthRequest = viewModel.TPList.Count * 120;
    //行高24,ListView.Footer中的Button高40
    dataListView.HeightRequest = (viewModel.Datas.Count + 1) * 24.4+40;
    //行高24,ListView.Footer中的Button高40
    nDateListView.HeightRequest = (viewModel.Datas.Count + 1) * 24.4+40;

  • 相关阅读:
    【工作总结】工作三年半的不归路,希望新人借鉴
    【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
    【OpenWRT】【RT5350】【二】烧写OpenWrt到RT5350开发板
    【OpenWRT】【RT5350】【一】OpenWrt开发环境搭建
    2013总结
    [原创]cocos2dx加载网络图片&异步加载图片
    json 对c++类的序列化(自动生成代码)
    [奇思幻想] 开发过程中的一些设想记录中(持续更新....)
    GNU Makefile编写
    c语言到汇编的学习
  • 原文地址:https://www.cnblogs.com/Xamarin-Oz/p/12575517.html
Copyright © 2011-2022 走看看