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;

  • 相关阅读:
    Vue.js学习笔记(8)拖放
    Vue.js学习笔记(7)组件详解
    使用了与请求的协议不兼容的地址的解决办法
    修改machine.config遇到System.Net.ServicePointManager 的类型初始值设定项引发异常
    未找到路径“/Agent/SissQrTemplate/AddN”的控制器或该控制器未实现 IController。
    C# .NET 2.0 判断当前程序进程是否为64位运行时 (x64)
    荣耀9开启虚拟按键
    C# .NET 4.5 将多个文件添加到压缩包中
    开IE时 暴卡
    VMware Workstation 安装 mac OS 时遇到 不可恢复错误: (vcpu-0)
  • 原文地址:https://www.cnblogs.com/Xamarin-Oz/p/12575517.html
Copyright © 2011-2022 走看看