我刚开始学习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";
}
}
答案 0 :(得分:1)
您没有提供太多代码,但getTreeResults
和getNetwork
看起来像是方法,而您的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”属性中。完成此操作后,列表将按预期填充。