繁体   English   中英

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

[英]WPF - Text is not appearing in Tree View

我刚开始学习 WPF,因为我正在从 WinForm 继续学习。 目前我在显示从类到树视图的绑定数据时遇到了困难。 如果我使用 .Items.Add() 方法,我的树视图可以完美运行,但是当涉及到将类数据绑定到 TreeView 时,我看到的是:

在此处输入图片说明

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

你没有给出太多代码,但getTreeResultsgetNetwork看起来像方法,你的TextBlock不知道如何呈现它们(通常,它会使用 ToString() 的结果,但我不知道这是否适用一个方法。

如果你想要这些方法,你可以这样试试:

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

进而

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

getNetwork 即,您将每个方法包装在一个公共属性中。

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

您的用户界面中显然发生了一些事情,但很难说到底是什么。

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

我在将 Windows 窗体应用程序转换为 WPF 时遇到了这个问题。 我知道这听起来很荒谬,但请确保您的值存储在 TreeViewItem 的“Header”属性中,而不是“Name”属性中。 一旦我这样做了,我的列表就会按预期填充。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM