Photonic
Photonic

Reputation: 1421

WPF - Text is not appearing in Tree View

i just started learning WPF as i am moving on from WinForm. At the moment i am having difficulties displaying bind data from class to tree view. My tree view works perfectly if i use .Items.Add() method but when it comes to binding class data to TreeView this is what i see:

enter image description here

Here is the c# code:

    public MainWindow()
    {
        InitializeComponent();
        Search sc = new Search();
        sc.query(null, "");
        this.DataContext = sc;
    }

Here is the xaml

<TreeView Width="400" Height="500" Name="TreeViewB" ItemsSource="{Binding getTreeResults}" Style="{StaticResource myTreeView}">
<TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Network}">
        <TextBlock Text="{Binding getNetwork}"/>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

Edited - 2 class added

Here is my class A

class Social_Searcher
{
    List<Social_Network> networks = new List<Social_Network>();
    public List<Social_Network> getTreeResults { get { return networks; } }
}

Here is my class B

class Social_Network
{
    private string network_name;
    private List<Keypair> data;

    public Social_Network()
    {
        data = new List<Keypair>();
    }
    public struct Keypair
    {
        public void add(string _name, string _value)
        {
            name = _name;
            value = _value;
        }
        public string name, value;
    }
    public string Network
    {
        get { return network_name; }
        set { network_name = value; }
    }
    public void add(string name, string value)
    {
        if (name == "network")
        {
            network_name = value;
        }
        Keypair kp = new Keypair();
        kp.add(name, value);
        data.Add(kp);
    }
    public string getNetwork()
    {
        return network_name;
    }
    public List<Keypair> getData()
    {
        return data;
    }
    public string findKey_value(string key)
    {
        foreach (Keypair kp in data)
        {
            if (kp.name == key) return kp.value.ToString();
        }
        return "null";
    }
}

Upvotes: 0

Views: 280

Answers (3)

danrvandiver
danrvandiver

Reputation: 1

I ran into this issue when converting a Windows Forms application to WPF. I know it sounds ridiculous, but make sure that your value is stored in the TreeViewItem's "Header" property, NOT the "Name" property. Once I did this, my list populated as expected.

Upvotes: 0

Drew Noakes
Drew Noakes

Reputation: 311195

There is clearly something going on in your UI, but it's hard to tell what exactly.

You will likely find a debugging tool such as Snoop useful, as it will allow you to click on items in your UI and see how they exist in the logical tree. You can modify their properties while the program is running to experiment and learn what you need to change in your source code.

Upvotes: 0

PScr
PScr

Reputation: 459

You don't give much code, but getTreeResults and getNetwork look like methods, and your TextBlock will not know how to present them (normally, it would use the results of ToString(), but I don't know if that will work with a method.

If you want those methods, you can try it this way:

public string TreeResults { get { return sc.getTreeResuls(); }}

and then

<TreeView ... ItemsSource={Binding TreeResults} ... > ...

The same goes for getNetwork. I.e., you wrap each method in a public property.

If you don't want to do that, or can't, you can use an IValueConverter

Upvotes: 1

Related Questions