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". Как только я это сделал, мой список пополнился, как ожидалось.