2017-07-25 75 views
1

我有以下問題, 我創建了一個樹模型與如下因素的論點:與列表同步一個GTK iterTree

this.Mods = SDVMMR.ModListManagment.LoadList(ModStore); 

    // Createing columns 
    Gtk.TreeViewColumn CBColumn = new Gtk.TreeViewColumn(); 
    CBColumn.Title = "Active"; 

    Gtk.CellRendererText CBCell = new Gtk.CellRendererText(); 
    CBColumn.PackStart(CBCell, true); 

    Gtk.TreeViewColumn NameColumn = new Gtk.TreeViewColumn(); 
    NameColumn.Title = "Name"; 

    Gtk.CellRendererText ModsNameCell = new Gtk.CellRendererText(); 
    NameColumn.PackStart(ModsNameCell, true); 

    Gtk.TreeViewColumn AuthorColumn = new Gtk.TreeViewColumn(); 
    AuthorColumn.Title = "Author"; 

    Gtk.CellRendererText AuthorCell = new Gtk.CellRendererText(); 
    AuthorColumn.PackStart(AuthorCell, true); 

    Gtk.TreeViewColumn VersionColumn = new Gtk.TreeViewColumn(); 
    VersionColumn.Title = "Version"; 

    Gtk.CellRendererText VersionCell = new Gtk.CellRendererText(); 
    VersionColumn.PackStart(VersionCell, true); 

    // Add the columns to the TreeView 
    activeMods.AppendColumn(CBColumn); 
    activeMods.AppendColumn(NameColumn); 
    activeMods.AppendColumn(AuthorColumn); 
    activeMods.AppendColumn(VersionColumn); 

    NameColumn.AddAttribute(ModsNameCell, "text", 1); 
    AuthorColumn.AddAttribute(AuthorCell, "text", 2); 
    VersionColumn.AddAttribute(VersionCell, "text",3); 

    // the column checkbox is created 
    Gtk.CellRendererToggle valueCb = new CellRendererToggle(); 
    CBColumn.PackStart(valueCb, true); 




    activeMods.Model = ModStore; 

的代碼中使用MODS由內部定義的: 內部列表MODS的= new List();

富勒這裏refrence使用的modinfo命令:

public string Name { get; set; } 
    public string Author { get; set; } 
    public string Version { get; set; } 
    public string UniqueID { get; set; } 
    public string MinimumApiVersion { get; set; } 
    public string Description { get; set; } 
    public string EntryDll { get; set;} 
    public bool IsActive { get; set; } 
    public bool IsXnb { get; set; } 
    public string OrgXnbPath { get; set; } 

我目前使用的函數看起來像:

 internal static void addToTree(ModInfo Mod, ListStore ModStore) 
    { 

     /*Gtk.TreeIter iter = ModStore.AppendValues(Mod.Name); 
     ModStore.AppendValues(iter, "Author", Mod.Author); 
     ModStore.AppendValues(iter, "Version", Mod.Version); 
     ModStore.AppendValues(iter, "Description", Mod.Description); 
     ModStore.AppendValues(iter, "Is Active", Mod.IsActive.ToString());*/ 

    ModStore.AppendValues(Mod.IsActive.ToString(),Mod.Name,Mod.Author,Mod.Version); 


    } 

,但這個犯規接受列表條目。那麼有沒有辦法讓它也接受內存列表。

回答

0

模型創建看起來不對。您可能不會將List作爲模型項目的類型。可能你想要的類型列表包含:

... new Gtk.TreeStore(typeof(SDVMMR.ModInfo));

假設該類SDVMMR.ModInfo是你所指出的,然後加在清單中的項目和填充模式,你應該做的事情,如屬性類:

foreach (ModInfo Mod in List<SDVMMR.ModInfo>) { 
    activeMods.AppendValues (Mod); 
} 

您還需要自定義單元格數據函數,以便樹視圖知道從哪裏獲取數據。

private void RenderNameCell (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) 
{ 
    SVDMMR.ModInfo modinfo = (SVDMMR.ModInfo) model.GetValue (iter, 0); 
    (cell as Gtk.CellRendererText).Text = modinfo.name; 
} 

private void RenderValueCell (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter) 
{ 
    // You didn't say what the value is so lets use UniqueID 

    SVDMMR.ModInfo modinfo = (SVDMMR.ModInfo) model.GetValue (iter, 0); 
    (cell as Gtk.CellRendererText).Text = modinfo.UniqueID; 
} 

這些方法必須在單元格渲染器設置:

NameColumn.SetCellDataFunc (ModsNameCell, new Gtk.TreeCellDataFunc (RenderNameCell)); 
ValueColumn.SetCellDataFunc (ModValueCell, new Gtk.TreeCellDataFunc (RenderValueCell)); 

你的代碼是不完整的,缺少了一些提示所以答案也可能是不完整的。

+0

我自己有點工作,但需要第二個函數來解析應用程序啓動時加載的列表到treeview(liststore)中。 – yuuki

+0

這應該與提到的foreach循環 –

+0

悲傷不會被編譯接受,因爲「錯誤CS0230:類型和標識符都需要在foreach語句(CS0230)(SDVMMR)」 – yuuki