picoe / Eto

Cross platform GUI framework for desktop and mobile applications in .NET
Other
3.57k stars 325 forks source link

TreeGridView doesn't update items after Expanding/Collapsing event #36

Closed evgeny-k closed 12 years ago

evgeny-k commented 12 years ago

windows/wpf

launch testcase and "play" with tree - expand and collapse some nodes

testcase:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Eto; using Eto.Forms; using Eto.Drawing; using System.Threading;

namespace etotest { class Program { [STAThread] static void Main(string[] args) { var generator = Generator.GetGenerator("Eto.Platform.Wpf.Generator, Eto.Platform.Wpf");

        var app = new TestApplication(generator);
        app.Run(args);
    }
}

public class TestApplication : Application
{
    public TestApplication(Generator generator)
        : base(generator)
    {
        this.Name = "Test Application";
    }

    public override void OnInitialized(EventArgs e)
    {
        this.MainForm = new MainForm();
        HandleEvent(Application.TerminatingEvent);

        base.OnInitialized(e);

        // show the main form
        this.MainForm.Show();
    }

}

public interface IMyTreeGridItem : ITreeGridItem
{
    String Name { get; set; }
}

public class MyTreeGridItem : TreeGridItem, IMyTreeGridItem
{
    public String Name { get; set; }
}

public class MainForm : Form
{
    int[] arr = new int[] { 5, 5, 5, 5 };
    TreeGridView tv;

    void CreateItem(TreeGridItem aParent, string aBaseName, int aLevel)
    {
        var lName = "[" + aLevel + "]" + aBaseName;
        var lItem = new MyTreeGridItem();
        lItem.Name = lName;
        aParent.Children.Add(lItem);
        if (aLevel < arr.Length)
            for (int i = 0; i < arr[aLevel]; i++)
                CreateItem(lItem, aBaseName + i.ToString(), aLevel + 1);
    }

    void CreateTree()
    {
        TreeGridItem lRoot = new MyTreeGridItem();
        CreateItem(lRoot, "Name", 0);

        Application.Instance.Invoke(delegate
        {
            tv.DataStore = lRoot;

            tv.Expanding += (sender, e) =>
            {
                (e.Item as IMyTreeGridItem).Name = "Expanded";
            };

            tv.Collapsing += (sender, e) =>
            {
                (e.Item as IMyTreeGridItem).Name = "Collapsed";
            };
        });

    }

    public MainForm()
    {
        Size = new Size(900, 800);
        var lp = new Panel();
        this.AddDockedControl(lp, new Padding(5));
        var lPanelLayout = new TableLayout(lp, 1, 2);
        lPanelLayout.Padding = new Padding(0);

        tv = new TreeGridView();
        tv.Columns.Add(new GridColumn { DataCell = new TextBoxCell("Name") });
        lPanelLayout.Add(tv, 0, 1, true, true);
        CreateTree();
    }

}

}

cwensley commented 12 years ago

Fixed with commit 8ac20b53243b56aa861fdbe2004326c764b9d9a4