WPF - текст не отображается в виде дерева

Я только начал изучать WPF, как я перехожу от WinForm. В настоящее время у меня возникают трудности с отображением данных привязки из класса в дерево. Мой вид дерева работает отлично, если я использую метод.Items.Add(), но когда дело доходит до привязки данных класса к TreeView, это то, что я вижу:

Вот код C#:

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

Вот хамл

<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 класса

Вот мой класс А

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

Вот мой класс Б

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

2 ответа

Вы не даете много кода, но getTreeResults а также getNetwork похожи на методы, и ваши TextBlock не будет знать, как их представить (как правило, он будет использовать результаты ToString(), но я не знаю, будет ли это работать с методом.

Если вы хотите эти методы, вы можете попробовать это так:

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

а потом

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

То же самое касается getNetwork, То есть вы заключаете каждый метод в публичную собственность.

Если вы не хотите этого делать или не можете, вы можете использовать IValueConverter

В вашем интерфейсе явно что-то происходит, но трудно сказать, что именно.

Скорее всего, вам пригодится инструмент отладки, такой как Snoop, так как он позволит вам щелкнуть элементы в вашем пользовательском интерфейсе и посмотреть, как они существуют в логическом дереве. Вы можете изменить их свойства во время работы программы, чтобы поэкспериментировать и узнать, что вам нужно изменить в исходном коде.

Я столкнулся с этой проблемой при преобразовании приложения Windows Forms в WPF. Я знаю, это звучит смешно, но убедитесь, что ваше значение хранится в свойстве TreeViewItem "Header", а НЕ в свойстве "Name". Как только я это сделал, мой список пополнился, как ожидалось.

Другие вопросы по тегам