• 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;

  • 相关阅读:
    NOIP2017 时间复杂度 大模拟
    【Python】CV2的一些基本操作
    【Python】类、对象、self
    【Ubuntu18.04】清空回收站
    小飞机可以解决git clone没有返回的问题吗?
    sqlserver2005 远程服务器数据 完全拷贝 到本地数据库
    Microsoft Visual Studio 2005 多线程时 解决不是该线程创建的来访问
    MS SqL2000 数据库置疑状态的解决方法[转]
    vue 函数配置项watch以及函数 $watch 源码分享
    Vue生命周期之beforeCreate vue 生命周期详解
  • 原文地址:https://www.cnblogs.com/Xamarin-Oz/p/12575517.html
Copyright © 2020-2023  润新知