2015-10-17 633 views
0

我有一個項目列表,我想綁定到我的ObjectListView,我認爲需要使用AspectGetter來實現這一點。我會如何去做這件事?AspectGetter從列表中獲取對象

我曾經嘗試這樣做產生額外的列,但我仍然無法將數據綁定到顯示列表項

 int count = 0; 
     foreach (var disk in vmObject.DisksList) 
     { 
      // create column with vhd+count 
      OLVColumn diskColumn = new OLVColumn("Attached VHD " + count, disk.Path); 

      // this lets you handle the model object directly 
      diskColumn.AspectGetter = delegate(object rowObject) 
      { 
       // check if that is the expected model type 
       if (rowObject is Model.HyperVTools.VMInfo) 
       { 
        // return the value of disklist 
        return ((Model.HyperVTools.VMInfo)rowObject).DisksList; 
       } 
       else 
       { 
        return ""; 
       } 
      }; 

      columnsList.Add(diskColumn); 
      count++; 
     } 


objectListView2.Columns.AddRange(columnsList.Cast<System.Windows.Forms.ColumnHeader>().ToArray()); 

     objectListView2.AddObject(vmObject); 

回答

0

foreach循環是不必要的。你只需要創建一個列。 AspectGetter也是如此。

只要向OLV添加對象,它就會調用AspectGetter委託自動獲取值並創建相應的行。我建議你再看看教程/例子。

+0

我正在通過教程再次看,我仍然困惑我將如何在我的代碼中使用它。我做foreach循環的原因是爲VHD創建額外的列,希望我能夠按每列顯示特定的VHD信息。 – KPS

+0

我不確定你試圖完成什麼。你在混合列和行嗎?如果你在每個「行」中包含「count」,也許會有所幫助,但是我不明白爲什麼要這樣初始化'column'頭並像現在這樣添加多列。 –

+0

虛擬機信息將以行爲單位顯示,每個虛擬機將具有附加VHD的X個計數。我將這些VHD存儲在列表中,我試圖在新列中顯示此信息,但不知道如何使用適當的AspectName生成適當的列。希望這是有道理的 – KPS