WPF - 文本未出现在树视图中

时间:2015-09-23 10:43:01

标签: c# wpf data-binding treeviewitem

我刚开始学习WPF,因为我正在从WinForm继续前进。目前,我在从类到树视图显示绑定数据时遇到困难。 如果我使用.Items.Add()方法,我的树视图效果很好,但是当涉及到将类数据绑定到TreeView时,这就是我所看到的:

enter image description here

这是c#代码:

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

这是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>

  

已编辑 - 已添加2个课程

这是我的A级

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

这是我的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";
    }
}

3 个答案:

答案 0 :(得分:1)

您没有提供太多代码,但getTreeResultsgetNetwork看起来像是方法,而您的TextBlock将不知道如何呈现它们(通常,它会使用ToString()的结果,但我不知道这是否适用于方法。

如果您需要这些方法,可以这样试试:

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

然后

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

getNetwork也是如此。即,将每个方法包装在公共属性中。

如果您不想这样做,或者不能这样做,您可以使用IValueConverter

答案 1 :(得分:0)

您的用户界面中肯定会发生一些事情,但很难确切说明具体内容。

您可能会发现Snoop这样的调试工具很有用,因为它允许您单击UI中的项目并查看它们在逻辑树中的存在方式。您可以在程序运行时修改其属性以进行实验,并了解需要在源代码中更改的内容。

答案 2 :(得分:0)

将Windows Forms应用程序转换为WPF时遇到了这个问题。我知道这听起来很荒谬,但是请确保您的值存储在TreeViewItem的“ Header”属性中,而不是“ Name”属性中。完成此操作后,列表将按预期填充。