与列表同步一个GTK iterTree

与列表同步一个GTK iterTree

问题描述:

我有以下问题, 我创建了一个树模型与如下因素的论点:与列表同步一个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); 


    } 

,但这个犯规接受列表条目。那么有没有办法让它也接受内存列表。

模型创建看起来不对。您可能不会将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