Bueno chicos me respondo y dejo un codigo de ejemplo con el cual he logrado hacerlo.
using System;
using System.Collections;
using Gtk;
public class ValParam
{
public ValParam (string parametro,string valor)
{
this.Parametro = parametro;
this.Valor = valor;
}
public string Parametro;
public string Valor;
}
public partial class MainWindow: Gtk.Window
{
public MainWindow (): base (Gtk.WindowType.Toplevel)
{
Build ();
CargarParametros ();
}
ArrayList misParametros;
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}
void CargarParametros ()
{
misParametros = new ArrayList ();
misParametros.Add (new ValParam ("color", "rojo"));
misParametros.Add (new ValParam ("sabor", "dulce"));
misParametros.Add (new ValParam ("textura", "suave"));
TreeViewColumn colParam = new TreeViewColumn ();
colParam.Title = "Parametro";
CellRendererText celdaParam = new CellRendererText ();
colParam.PackStart (celdaParam, true);
TreeViewColumn colValor = new TreeViewColumn ();
colValor.Title = "Valor";
CellRendererText celdaValor = new CellRendererText ();
celdaValor.Editable = true;
celdaValor.Edited += ValorIngresado;
colValor.PackStart (celdaValor, true);
ListStore lstValores = new ListStore (typeof(ValParam));
foreach (ValParam registro in misParametros) {
lstValores.AppendValues (registro);
}
colParam.SetCellDataFunc (celdaParam, new TreeCellDataFunc (RenderParametro));
colValor.SetCellDataFunc (celdaValor, new TreeCellDataFunc (RenderValor));
nodParametros.Model = lstValores;
nodParametros.AppendColumn (colParam);
nodParametros.AppendColumn (colValor);
nodParametros.EnableGridLines = TreeViewGridLines.Vertical;
}
void RenderParametro (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
{
ValParam registro = (ValParam)tree_model.GetValue (iter, 0);
if (registro.Parametro.StartsWith ("c") == true) {
(cell as Gtk.CellRendererText).Foreground="red";
} else {
(cell as Gtk.CellRendererText).Foreground="darkgreen";
}
(cell as Gtk.CellRendererText).Text = registro.Parametro;
}
void RenderValor (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
{
ValParam registro = (ValParam)tree_model.GetValue (iter, 0);
(cell as Gtk.CellRendererText).Text = registro.Valor;
}
private void ValorIngresado (object o, EditedArgs args)
{
Gtk.TreeIter iter;
nodParametros.Model.GetIter(out iter, new TreePath (args.Path));
ValParam registro = (ValParam)nodParametros.Model.GetValue (iter, 0);
registro.Valor = args.NewText;
}
protected void ClickEnviar (object sender, EventArgs e)
{
throw new NotImplementedException ();
}
}
Use como documentacion de respaldo el siguiente link
http://www.mono-project.com/GtkSharp_TreeView_Tutorial
Aunque si revisan mi ejemplo notaran que en el metodo ValorIngresado me refiero al tree utilizando la propiedad Model y no directamente como hace la gente de Mono.