namespace WPFListViewDemo
internal class ViewModel
public ViewModel()
DataList = InitData();
private List<Data> InitData()
List<Data> datalist = new List<Data>();
Type info = typeof(Data);
var properties = info.GetProperties();
for (int i = 0; i < 50000; i++)
Data data = new Data();
foreach (var property in properties)
property.SetValue(data, property.Name + i.ToString());
datalist.Add(data);
return datalist;
public List<Data> DataList { get; set; }
public class Data
public string Col1 { get; set; }
public string Col2 { get; set; }
public string Col3 { get; set; }
public string Col4 { get; set; }
public string Col5 { get; set; }
public string Col6 { get; set; }
public string Col7 { get; set; }
public string Col8 { get; set; }
public string Col9 { get; set; }
public string Col10 { get; set; }
public string Col11 { get; set; }
public string Col12 { get; set; }
public string Col13 { get; set; }
public string Col14 { get; set; }
public string Col15 { get; set; }
public string Col16 { get; set; }
public string Col17 { get; set; }
public string Col18 { get; set; }
public string Col19 { get; set; }
public string Col20 { get; set; }
public string Col21 { get; set; }
public string Col22 { get; set; }
public string Col23 { get; set; }
public string Col24 { get; set; }
public string Col25 { get; set; }
public string Col26 { get; set; }
public string Col27 { get; set; }
public string Col28 { get; set; }
public string Col29 { get; set; }
public string Col30{ get; set; }
public string Col31 { get; set; }
public string Col32 { get; set; }
public string Col33 { get; set; }
public string Col34 { get; set; }
public string Col35 { get; set; }
public string Col36 { get; set; }
public string Col37 { get; set; }
public string Col38 { get; set; }
public string Col39 { get; set; }
public string Col40 { get; set; }
public string Col41 { get; set; }
public string Col42 { get; set; }
public string Col43 { get; set; }
public string Col44 { get; set; }
public string Col45 { get; set; }
public string Col46 { get; set; }
public string Col47 { get; set; }
public string Col48 { get; set; }
public string Col49 { get; set; }
public string Col50 { get; set; }
public string ACol1 { get; set; }
public string ACol2 { get; set; }
public string ACol3 { get; set; }
public string ACol4 { get; set; }
public string ACol5 { get; set; }
public string ACol6 { get; set; }
public string ACol7 { get; set; }
public string ACol8 { get; set; }
public string ACol9 { get; set; }
public string ACol10 { get; set; }
public string ACol11 { get; set; }
public string ACol12 { get; set; }
public string ACol13 { get; set; }
public string ACol14 { get; set; }
public string ACol15 { get; set; }
public string ACol16 { get; set; }
public string ACol17 { get; set; }
public string ACol18 { get; set; }
public string ACol19 { get; set; }
public string ACol20 { get; set; }
public string ACol21 { get; set; }
public string ACol22 { get; set; }
public string ACol23 { get; set; }
public string ACol24 { get; set; }
public string ACol25 { get; set; }
public string ACol26 { get; set; }
public string ACol27 { get; set; }
public string ACol28 { get; set; }
public string ACol29 { get; set; }
public string ACol30 { get; set; }
public string ACol31 { get; set; }
public string ACol32 { get; set; }
public string ACol33 { get; set; }
public string ACol34 { get; set; }
public string ACol35 { get; set; }
public string ACol36 { get; set; }
public string ACol37 { get; set; }
public string ACol38 { get; set; }
public string ACol39 { get; set; }
public string ACol40 { get; set; }
public string ACol41 { get; set; }
public string ACol42 { get; set; }
public string ACol43 { get; set; }
public string ACol44 { get; set; }
public string ACol45 { get; set; }
public string ACol46 { get; set; }
public string ACol47 { get; set; }
public string ACol48 { get; set; }
public string ACol49 { get; set; }
public string ACol50 { get; set; }
public string BCol1 { get; set; }
public string BCol2 { get; set; }
public string BCol3 { get; set; }
public string BCol4 { get; set; }
public string BCol5 { get; set; }
public string BCol6 { get; set; }
public string BCol7 { get; set; }
public string BCol8 { get; set; }
public string BCol9 { get; set; }
public string BCol10 { get; set; }
public string BCol11 { get; set; }
public string BCol12 { get; set; }
public string BCol13 { get; set; }
public string BCol14 { get; set; }
public string BCol15 { get; set; }
public string BCol16 { get; set; }
public string BCol17 { get; set; }
public string BCol18 { get; set; }
public string BCol19 { get; set; }
public string BCol20 { get; set; }
public string BCol21 { get; set; }
public string BCol22 { get; set; }
public string BCol23 { get; set; }
public string BCol24 { get; set; }
public string BCol25 { get; set; }
public string BCol26 { get; set; }
public string BCol27 { get; set; }
public string BCol28 { get; set; }
public string BCol29 { get; set; }
public string BCol30 { get; set; }
public string BCol31 { get; set; }
public string BCol32 { get; set; }
public string BCol33 { get; set; }
public string BCol34 { get; set; }
public string BCol35 { get; set; }
public string BCol36 { get; set; }
public string BCol37 { get; set; }
public string BCol38 { get; set; }
public string BCol39 { get; set; }
public string BCol40 { get; set; }
public string BCol41 { get; set; }
public string BCol42 { get; set; }
public string BCol43 { get; set; }
public string BCol44 { get; set; }
public string BCol45 { get; set; }
public string BCol46 { get; set; }
public string BCol47 { get; set; }
public string BCol48 { get; set; }
public string BCol49 { get; set; }
public string BCol50 { get; set; }
public string BACol1 { get; set; }
public string BACol2 { get; set; }
public string BACol3 { get; set; }
public string BACol4 { get; set; }
public string BACol5 { get; set; }
public string BACol6 { get; set; }
public string BACol7 { get; set; }
public string BACol8 { get; set; }
public string BACol9 { get; set; }
public string BACol10 { get; set; }
public string BACol11 { get; set; }
public string BACol12 { get; set; }
public string BACol13 { get; set; }
public string BACol14 { get; set; }
public string BACol15 { get; set; }
public string BACol16 { get; set; }
public string BACol17 { get; set; }
public string BACol18 { get; set; }
public string BACol19 { get; set; }
public string BACol20 { get; set; }
public string BACol21 { get; set; }
public string BACol22 { get; set; }
public string BACol23 { get; set; }
public string BACol24 { get; set; }
public string BACol25 { get; set; }
public string BACol26 { get; set; }
public string BACol27 { get; set; }
public string BACol28 { get; set; }
public string BACol29 { get; set; }
public string BACol30 { get; set; }
public string BACol31 { get; set; }
public string BACol32 { get; set; }
public string BACol33 { get; set; }
public string BACol34 { get; set; }
public string BACol35 { get; set; }
public string BACol36 { get; set; }
public string BACol37 { get; set; }
public string BACol38 { get; set; }
public string BACol39 { get; set; }
public string BACol40 { get; set; }
public string BACol41 { get; set; }
public string BACol42 { get; set; }
public string BACol43 { get; set; }
public string BACol44 { get; set; }
public string BACol45 { get; set; }
public string BACol46 { get; set; }
public string BACol47 { get; set; }
public string BACol48 { get; set; }
public string BACol49 { get; set; }
public string BACol50 { get; set; }
public string CBCol1 { get; set; }
public string CBCol2 { get; set; }
public string CBCol3 { get; set; }
public string CBCol4 { get; set; }
public string CBCol5 { get; set; }
public string CBCol6 { get; set; }
public string CBCol7 { get; set; }
public string CBCol8 { get; set; }
public string CBCol9 { get; set; }
public string CBCol10 { get; set; }
public string CBCol11 { get; set; }
public string CBCol12 { get; set; }
public string CBCol13 { get; set; }
public string CBCol14 { get; set; }
public string CBCol15 { get; set; }
public string CBCol16 { get; set; }
public string CBCol17 { get; set; }
public string CBCol18 { get; set; }
public string CBCol19 { get; set; }
public string CBCol20 { get; set; }
public string CBCol21 { get; set; }
public string CBCol22 { get; set; }
public string CBCol23 { get; set; }
public string CBCol24 { get; set; }
public string CBCol25 { get; set; }
public string CBCol26 { get; set; }
public string CBCol27 { get; set; }
public string CBCol28 { get; set; }
public string CBCol29 { get; set; }
public string CBCol30 { get; set; }
public string CBCol31 { get; set; }
public string CBCol32 { get; set; }
public string CBCol33 { get; set; }
public string CBCol34 { get; set; }
public string CBCol35 { get; set; }
public string CBCol36 { get; set; }
public string CBCol37 { get; set; }
public string CBCol38 { get; set; }
public string CBCol39 { get; set; }
public string CBCol40 { get; set; }
public string CBCol41 { get; set; }
public string CBCol42 { get; set; }
public string CBCol43 { get; set; }
public string CBCol44 { get; set; }
public string CBCol45 { get; set; }
public string CBCol46 { get; set; }
public string CBCol47 { get; set; }
public string CBCol48 { get; set; }
public string CBCol49 { get; set; }
public string CBCol50 { get; set; }
public string CBACol1 { get; set; }
public string CBACol2 { get; set; }
public string CBACol3 { get; set; }
public string CBACol4 { get; set; }
public string CBACol5 { get; set; }
public string CBACol6 { get; set; }
public string CBACol7 { get; set; }
public string CBACol8 { get; set; }
public string CBACol9 { get; set; }
public string CBACol10 { get; set; }
public string CBACol11 { get; set; }
public string CBACol12 { get; set; }
public string CBACol13 { get; set; }
public string CBACol14 { get; set; }
public string CBACol15 { get; set; }
public string CBACol16 { get; set; }
public string CBACol17 { get; set; }
public string CBACol18 { get; set; }
public string CBACol19 { get; set; }
public string CBACol20 { get; set; }
public string CBACol21 { get; set; }
public string CBACol22 { get; set; }
public string CBACol23 { get; set; }
public string CBACol24 { get; set; }
public string CBACol25 { get; set; }
public string CBACol26 { get; set; }
public string CBACol27 { get; set; }
public string CBACol28 { get; set; }
public string CBACol29 { get; set; }
public string CBACol30 { get; set; }
public string CBACol31 { get; set; }
public string CBACol32 { get; set; }
public string CBACol33 { get; set; }
public string CBACol34 { get; set; }
public string CBACol35 { get; set; }
public string CBACol36 { get; set; }
public string CBACol37 { get; set; }
public string CBACol38 { get; set; }
public string CBACol39 { get; set; }
public string CBACol40 { get; set; }
public string CBACol41 { get; set; }
public string CBACol42 { get; set; }
public string CBACol43 { get; set; }
public string CBACol44 { get; set; }
public string CBACol45 { get; set; }
public string CBACol46 { get; set; }
public string CBACol47 { get; set; }
public string CBACol48 { get; set; }
public string CBACol49 { get; set; }
public string CBACol50 { get; set; }
public string ABCCol1 { get; set; }
public string ABCCol2 { get; set; }
public string ABCCol3 { get; set; }
public string ABCCol4 { get; set; }
public string ABCCol5 { get; set; }
public string ABCCol6 { get; set; }
public string ABCCol7 { get; set; }
public string ABCCol8 { get; set; }
public string ABCCol9 { get; set; }
public string ABCCol10 { get; set; }
public string ABCCol11 { get; set; }
public string ABCCol12 { get; set; }
public string ABCCol13 { get; set; }
public string ABCCol14 { get; set; }
public string ABCCol15 { get; set; }
public string ABCCol16 { get; set; }
public string ABCCol17 { get; set; }
public string ABCCol18 { get; set; }
public string ABCCol19 { get; set; }
public string ABCCol20 { get; set; }
public string ABCCol21 { get; set; }
public string ABCCol22 { get; set; }
public string ABCCol23 { get; set; }
public string ABCCol24 { get; set; }
public string ABCCol25 { get; set; }
public string ABCCol26 { get; set; }
public string ABCCol27 { get; set; }
public string ABCCol28 { get; set; }
public string ABCCol29 { get; set; }
public string ABCCol30 { get; set; }
public string ABCCol31 { get; set; }
public string ABCCol32 { get; set; }
public string ABCCol33 { get; set; }
public string ABCCol34 { get; set; }
public string ABCCol35 { get; set; }
public string ABCCol36 { get; set; }
public string ABCCol37 { get; set; }
public string ABCCol38 { get; set; }
public string ABCCol39 { get; set; }
public string ABCCol40 { get; set; }
public string ABCCol41 { get; set; }
public string ABCCol42 { get; set; }
public string ABCCol43 { get; set; }
public string ABCCol44 { get; set; }
public string ABCCol45 { get; set; }
public string ABCCol46 { get; set; }
public string ABCCol47 { get; set; }
public string ABCCol48 { get; set; }
public string ABCCol49 { get; set; }
public string ABCCol50 { get; set; }
public string ABCACol1 { get; set; }
public string ABCACol2 { get; set; }
public string ABCACol3 { get; set; }
public string ABCACol4 { get; set; }
public string ABCACol5 { get; set; }
public string ABCACol6 { get; set; }
public string ABCACol7 { get; set; }
public string ABCACol8 { get; set; }
public string ABCACol9 { get; set; }
public string ABCACol10 { get; set; }
public string ABCACol11 { get; set; }
public string ABCACol12 { get; set; }
public string ABCACol13 { get; set; }
public string ABCACol14 { get; set; }
public string ABCACol15 { get; set; }
public string ABCACol16 { get; set; }
public string ABCACol17 { get; set; }
public string ABCACol18 { get; set; }
public string ABCACol19 { get; set; }
public string ABCACol20 { get; set; }
public string ABCACol21 { get; set; }
public string ABCACol22 { get; set; }
public string ABCACol23 { get; set; }
public string ABCACol24 { get; set; }
public string ABCACol25 { get; set; }
public string ABCACol26 { get; set; }
public string ABCACol27 { get; set; }
public string ABCACol28 { get; set; }
public string ABCACol29 { get; set; }
public string ABCACol30 { get; set; }
public string ABCACol31 { get; set; }
public string ABCACol32 { get; set; }
public string ABCACol33 { get; set; }
public string ABCACol34 { get; set; }
public string ABCACol35 { get; set; }
public string ABCACol36 { get; set; }
public string ABCACol37 { get; set; }
public string ABCACol38 { get; set; }
public string ABCACol39 { get; set; }
public string ABCACol40 { get; set; }
public string ABCACol41 { get; set; }
public string ABCACol42 { get; set; }
public string ABCACol43 { get; set; }
public string ABCACol44 { get; set; }
public string ABCACol45 { get; set; }
public string ABCACol46 { get; set; }
public string ABCACol47 { get; set; }
public string ABCACol48 { get; set; }
public string ABCACol49 { get; set; }
public string ABCACol50 { get; set; }
public string ABCBCol1 { get; set; }
public string ABCBCol2 { get; set; }
public string ABCBCol3 { get; set; }
public string ABCBCol4 { get; set; }
public string ABCBCol5 { get; set; }
public string ABCBCol6 { get; set; }
public string ABCBCol7 { get; set; }
public string ABCBCol8 { get; set; }
public string ABCBCol9 { get; set; }
public string ABCBCol10 { get; set; }
public string ABCBCol11 { get; set; }
public string ABCBCol12 { get; set; }
public string ABCBCol13 { get; set; }
public string ABCBCol14 { get; set; }
public string ABCBCol15 { get; set; }
public string ABCBCol16 { get; set; }
public string ABCBCol17 { get; set; }
public string ABCBCol18 { get; set; }
public string ABCBCol19 { get; set; }
public string ABCBCol20 { get; set; }
public string ABCBCol21 { get; set; }
public string ABCBCol22 { get; set; }
public string ABCBCol23 { get; set; }
public string ABCBCol24 { get; set; }
public string ABCBCol25 { get; set; }
public string ABCBCol26 { get; set; }
public string ABCBCol27 { get; set; }
public string ABCBCol28 { get; set; }
public string ABCBCol29 { get; set; }
public string ABCBCol30 { get; set; }
public string ABCBCol31 { get; set; }
public string ABCBCol32 { get; set; }
public string ABCBCol33 { get; set; }
public string ABCBCol34 { get; set; }
public string ABCBCol35 { get; set; }
public string ABCBCol36 { get; set; }
public string ABCBCol37 { get; set; }
public string ABCBCol38 { get; set; }
public string ABCBCol39 { get; set; }
public string ABCBCol40 { get; set; }
public string ABCBCol41 { get; set; }
public string ABCBCol42 { get; set; }
public string ABCBCol43 { get; set; }
public string ABCBCol44 { get; set; }
public string ABCBCol45 { get; set; }
public string ABCBCol46 { get; set; }
public string ABCBCol47 { get; set; }
public string ABCBCol48 { get; set; }
public string ABCBCol49 { get; set; }
public string ABCBCol50 { get; set; }
public string ABCBACol1 { get; set; }
public string ABCBACol2 { get; set; }
public string ABCBACol3 { get; set; }
public string ABCBACol4 { get; set; }
public string ABCBACol5 { get; set; }
public string ABCBACol6 { get; set; }
public string ABCBACol7 { get; set; }
public string ABCBACol8 { get; set; }
public string ABCBACol9 { get; set; }
public string ABCBACol10 { get; set; }
public string ABCBACol11 { get; set; }
public string ABCBACol12 { get; set; }
public string ABCBACol13 { get; set; }
public string ABCBACol14 { get; set; }
public string ABCBACol15 { get; set; }
public string ABCBACol16 { get; set; }
public string ABCBACol17 { get; set; }
public string ABCBACol18 { get; set; }
public string ABCBACol19 { get; set; }
public string ABCBACol20 { get; set; }
public string ABCBACol21 { get; set; }
public string ABCBACol22 { get; set; }
public string ABCBACol23 { get; set; }
public string ABCBACol24 { get; set; }
public string ABCBACol25 { get; set; }
public string ABCBACol26 { get; set; }
public string ABCBACol27 { get; set; }
public string ABCBACol28 { get; set; }
public string ABCBACol29 { get; set; }
public string ABCBACol30 { get; set; }
public string ABCBACol31 { get; set; }
public string ABCBACol32 { get; set; }
public string ABCBACol33 { get; set; }
public string ABCBACol34 { get; set; }
public string ABCBACol35 { get; set; }
public string ABCBACol36 { get; set; }
public string ABCBACol37 { get; set; }
public string ABCBACol38 { get; set; }
public string ABCBACol39 { get; set; }
public string ABCBACol40 { get; set; }
public string ABCBACol41 { get; set; }
public string ABCBACol42 { get; set; }
public string ABCBACol43 { get; set; }
public string ABCBACol44 { get; set; }
public string ABCBACol45 { get; set; }
public string ABCBACol46 { get; set; }
public string ABCBACol47 { get; set; }
public string ABCBACol48 { get; set; }
public string ABCBACol49 { get; set; }
public string ABCBACol50 { get; set; }
public string ABCCBCol1 { get; set; }
public string ABCCBCol2 { get; set; }
public string ABCCBCol3 { get; set; }
public string ABCCBCol4 { get; set; }
public string ABCCBCol5 { get; set; }
public string ABCCBCol6 { get; set; }
public string ABCCBCol7 { get; set; }
public string ABCCBCol8 { get; set; }
public string ABCCBCol9 { get; set; }
public string ABCCBCol10 { get; set; }
public string ABCCBCol11 { get; set; }
public string ABCCBCol12 { get; set; }
public string ABCCBCol13 { get; set; }
public string ABCCBCol14 { get; set; }
public string ABCCBCol15 { get; set; }
public string ABCCBCol16 { get; set; }
public string ABCCBCol17 { get; set; }
public string ABCCBCol18 { get; set; }
public string ABCCBCol19 { get; set; }
public string ABCCBCol20 { get; set; }
public string ABCCBCol21 { get; set; }
public string ABCCBCol22 { get; set; }
public string ABCCBCol23 { get; set; }
public string ABCCBCol24 { get; set; }
public string ABCCBCol25 { get; set; }
public string ABCCBCol26 { get; set; }
public string ABCCBCol27 { get; set; }
public string ABCCBCol28 { get; set; }
public string ABCCBCol29 { get; set; }
public string ABCCBCol30 { get; set; }
public string ABCCBCol31 { get; set; }
public string ABCCBCol32 { get; set; }
public string ABCCBCol33 { get; set; }
public string ABCCBCol34 { get; set; }
public string ABCCBCol35 { get; set; }
public string ABCCBCol36 { get; set; }
public string ABCCBCol37 { get; set; }
public string ABCCBCol38 { get; set; }
public string ABCCBCol39 { get; set; }
public string ABCCBCol40 { get; set; }
public string ABCCBCol41 { get; set; }
public string ABCCBCol42 { get; set; }
public string ABCCBCol43 { get; set; }
public string ABCCBCol44 { get; set; }
public string ABCCBCol45 { get; set; }
public string ABCCBCol46 { get; set; }
public string ABCCBCol47 { get; set; }
public string ABCCBCol48 { get; set; }
public string ABCCBCol49 { get; set; }
public string ABCCBCol50 { get; set; }
public string ABCCBACol1 { get; set; }
public string ABCCBACol2 { get; set; }
public string ABCCBACol3 { get; set; }
public string ABCCBACol4 { get; set; }
public string ABCCBACol5 { get; set; }
public string ABCCBACol6 { get; set; }
public string ABCCBACol7 { get; set; }
public string ABCCBACol8 { get; set; }
public string ABCCBACol9 { get; set; }
public string ABCCBACol10 { get; set; }
public string ABCCBACol11 { get; set; }
public string ABCCBACol12 { get; set; }
public string ABCCBACol13 { get; set; }
public string ABCCBACol14 { get; set; }
public string ABCCBACol15 { get; set; }
public string ABCCBACol16 { get; set; }
public string ABCCBACol17 { get; set; }
public string ABCCBACol18 { get; set; }
public string ABCCBACol19 { get; set; }
public string ABCCBACol20 { get; set; }
public string ABCCBACol21 { get; set; }
public string ABCCBACol22 { get; set; }
public string ABCCBACol23 { get; set; }
public string ABCCBACol24 { get; set; }
public string ABCCBACol25 { get; set; }
public string ABCCBACol26 { get; set; }
public string ABCCBACol27 { get; set; }
public string ABCCBACol28 { get; set; }
public string ABCCBACol29 { get; set; }
public string ABCCBACol30 { get; set; }
public string ABCCBACol31 { get; set; }
public string ABCCBACol32 { get; set; }
public string ABCCBACol33 { get; set; }
public string ABCCBACol34 { get; set; }
public string ABCCBACol35 { get; set; }
public string ABCCBACol36 { get; set; }
public string ABCCBACol37 { get; set; }
public string ABCCBACol38 { get; set; }
public string ABCCBACol39 { get; set; }
public string ABCCBACol40 { get; set; }
public string ABCCBACol41 { get; set; }
public string ABCCBACol42 { get; set; }
public string ABCCBACol43 { get; set; }
public string ABCCBACol44 { get; set; }
public string ABCCBACol45 { get; set; }
public string ABCCBACol46 { get; set; }
public string ABCCBACol47 { get; set; }
public string ABCCBACol48 { get; set; }
public string ABCCBACol49 { get; set; }
public string ABCCBACol50 { get; set; }
支持(0)
反对(0)
园豆:12459
(专家六级)
2022-09-13 11:53
<Window x:Class="TestListView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestListView"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<TabControl>
<TabItem Header="使用 ListView">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Name="btnCreateData1" Width="60" Height="23" Content="创建数据" Margin="2" Click="btnCreateData1_Click" />
</StackPanel>
<ListView Grid.Row="1" Name="listViewBind"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll ="True"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListView.View>
<GridView x:Name="gridViewBind">
<GridView.Columns>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</Grid>
</TabItem>
<TabItem Header="使用 DataGrid">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Name="btnCreateData2" Width="60" Height="23" Content="创建数据" Margin="2" Click="btnCreateData2_Click" />
</StackPanel>
<DataGrid Grid.Row="1" Name="dataGrid1" AutoGenerateColumns="False">
</DataGrid>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows;
7 using System.Windows.Controls;
8 using System.Windows.Data;
9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
16 namespace TestListView {
18 public class MyData {
19 public int Sn {
20 get;
21 set;
22 }
24 public Dictionary<string, string> Value {
25 get;
26 set;
27 } = new Dictionary<string, string>();
28 }
30 /// <summary>
31 /// Interaction logic for MainWindow.xaml
32 /// </summary>
33 public partial class MainWindow : Window {
34 private const int Column_Count = 500;
35 private const int Row_Count = 1000;
36 private static readonly Random rdm = new Random();
38 public MainWindow() {
39 InitializeComponent();
40 }
42 private void ResetColumns(GridView gridView) {
43 gridView.Columns.Clear();
45 Binding bindingSn = new Binding("Sn");
46 bindingSn.Mode = BindingMode.OneTime;
47 bindingSn.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
48 GridViewColumn colSn = new GridViewColumn();
49 colSn.Width = 100;
50 colSn.Header = "序号";
51 colSn.DisplayMemberBinding = bindingSn;
52 gridView.Columns.Add(colSn);
54 for(int i=1; i<=Column_Count; i++) {
55 string strIdx = i.ToString().PadLeft(3, '0');
56 Binding binding = new Binding($"Value[Signal_{strIdx}]");
57 binding.Mode = BindingMode.OneTime;
58 binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
60 GridViewColumn col = new GridViewColumn();
61 col.Width = 120;
62 col.Header = "信号 " + i.ToString().PadLeft(3, '0');
63 col.DisplayMemberBinding = binding;
65 gridView.Columns.Add(col);
66 }
67 }
69 private void ResetColumns(DataGrid dataGrid) {
70 dataGrid.Columns.Clear();
72 Binding bindingSn = new Binding("Sn");
73 bindingSn.Mode = BindingMode.OneTime;
74 bindingSn.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
76 DataGridTextColumn colSn = new DataGridTextColumn();
77 colSn.Header = "序号";
78 colSn.Width = 60;
79 colSn.Binding = bindingSn;
80 dataGrid.Columns.Add(colSn);
82 for(int i=1; i<=Column_Count; i++) {
83 string strIdx = i.ToString().PadLeft(3, '0');
84 Binding binding = new Binding($"Value[Signal_{strIdx}]");
85 binding.Mode = BindingMode.OneTime;
86 binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
88 DataGridTextColumn col = new DataGridTextColumn();
89 col.Width = 120;
90 col.Header = "信号 " + i.ToString().PadLeft(3, '0');
91 col.Binding = binding;
93 dataGrid.Columns.Add(col);
94 }
95 }
97 private List<MyData> CreateDataList() {
98 List<MyData> list = new List<MyData>();
99 for (int i = 0; i < Row_Count; i++) {
100 MyData data = new MyData();
101 data.Sn = i + 1;
102 for (int j = 1; j <= Column_Count; j++) {
103 string strIdx = j.ToString().PadLeft(3, '0');
104 data.Value[$"Signal_{strIdx}"] = (rdm.NextDouble() * 100).ToString("F4");
105 }
106 list.Add(data);
107 }
108 return list;
109 }
111 private void ResetDataGridColumn(DataGrid dataGrid) {
113 }
115 private void btnCreateData1_Click(object sender, RoutedEventArgs e) {
116 this.ResetColumns(this.gridViewBind);
117 this.listViewBind.ItemsSource = this.CreateDataList();
118 }
120 private void btnCreateData2_Click(object sender, RoutedEventArgs e) {
121 this.ResetColumns(this.dataGrid1);
122 this.dataGrid1.ItemsSource = this.CreateDataList();
123 }
124 }
125 }
@会长: 参考你的代码,用 DataGrid 取代原来的 ListView,再加上虚拟化,已经好很多了。但在数据量大时还是有点卡。ListView 加虚拟化似乎没什么变化。
支持(0)
反对(0)
园豆:51
(初学一级)
2022-09-23 11:54
前面也很多都和题主一样,认为这个需求很BT。其实用户的想法很没那么复杂,单纯的用Excle表格习惯了而已。
对用户来说,分页、拉到底才加载(下拉分页)什么的用起来麻烦。
而且工业软件和平台互联网应用不太一样,很容易出现需要大量展示数据的场景,不能完全说需求变态。
我们也遇到过这样的需求,只是我们是Web端,表格列和行极限大约在30/1W多的样子,而且我们的数据是还需要实时更新,更新延迟要控制在1分钟内。先前做分页,渐进加载被客户投诉好几回,开会讨论好多回,最后老板拍板,把那些都删除了,后来就是大帐户一登录就卡得一塌糊涂,客户反而不投诉了,开始反映系统卡但闹得也没这么凶了。然后,就是漫长的解决问题之路,讨论怎么拆分业务不显示这么多数据,表格虚拟化等,反正现在还行,双方都可以接受。
如里业务确实无法拆分,要实现这个,只能从虚拟化入手,毕竟用户可视区就那么大。但是基本上都需要定制,用控制内置的效果可能不太理想。我们先前的项目改造的重点就是去掉vue表格原生数据变动监听(自定义虚拟化渲染)。
难点往往在于识别那些行/列是当前显示在用户视区范围内的,然后用户拖动滚动条(或键盘移动)时实时渲染可视区数据。全部数据可以放在内存中,也可以放到SQLite中。
对WPF不太了解,但使用内置控件时可以考虑取消双向绑定(不需要编辑数据时)和数据变化监听(不用实时刷新时)。
这个业务还真不好拆分
简单来说,是个工控方面的数据显示控件。数据列分为两大类,一类是固定的必须有的数据,不多,也就20几个,象序号、采样时间、电流、电压、温度、功率之类的。另一类是动态的,比如实际运行时,接了10个电池,每个电池20个电芯,每个电芯有电压、温度两个量,这样就有10*20*2=400个量,再加上统计出来的单体电芯最高电压、最低电压、最高温度、最低温度,就是404个。
最好的方式就是显示固定数据之后,再加上最高/最低的电压和温度,另外400个就不显示了。但那400个信号,其实都没差别,不好分哪个重要哪个次要。
支持(0)
反对(0)
园豆:51
(初学一级)
2022-09-13 11:40
5w行不过分,应该现在的机器5w个粒子60FPS都没问题。
桌面端的意义正在于此,不然用什么桌面端,用网页做就行了。
10多年前别个c#绘制的实时曲线都是几十万个点。
实时的话无非就是内存绘制而已,如果非即时无非就是loading或者自行绘制进行优化。
这里说一个类似简单办法,直接绘制成图片(内存),然后贴到控件上去。当然也可以通过处理滚动等等方式处理。第一种方法最简单,代码最少。
@血狼一族: 光显示出来应该问题不大,关键是他这个也应该需要实时更新的吧!难度还是不小哦。
另外,参考一下Excel/WPS表格,800列表、10W数据也够呛。
听说,微软内部office也试着用.NET来重写,最后性能很不好放弃了,现在都只是套壳。
如果是这样的话,Excel都卡的数据量,c#/WPF再怎么优化恐怕也是枉然哦。
支持(0)
反对(0)
园豆:119
(初学一级)
2022-09-13 12:07