我想像这样画出来:
我可以在控制台上绘制二叉树。我想用WPF绘制它。这是我为控制台编写的代码。
class Program
{
static void Main(string[] args)
{
List<BinaryTreeData> myBinaryData = new List<BinaryTreeData>();
myBinaryData.Add(new BinaryTreeData{ownID=1});
myBinaryData.Add(new BinaryTreeData { parentID=1, ownID = 2 });
myBinaryData.Add(new BinaryTreeData { parentID=1,ownID = 3 });
foreach (var item in myBinaryData)
{
Console.WriteLine("{0}------{1}", item.parentID, item.ownID);
}
}
}
class BinaryTreeData : INotifyPropertyChanged
{
private int _ownID;
private int _parentID;
public int ownID
{
get { return this._ownID; }
set { this._ownID = value; this.onChange("ownID"); }
}
public int parentID
{
get { return this._parentID; }
set { this._parentID = value; this.onChange("parentID"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void onChange(string propertyName)
{
if (PropertyChanged!=null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我无法理解我该怎么做。
答案 0 :(得分:2)
每个树节点都需要有一个子集合。如果要将其限制为二叉树,则可以将子集合限制为最多2个项目。
我会推荐本教程,因为它还将向您展示如何使用MVVM实现此目的。
http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx
修改强>
由于您已经更新了帖子,看起来您正在寻找不同的东西,我认为您最好使用第三方解决方案,而不是实现自己的解决方案。
尝试查看这些解决方案 -
答案 1 :(得分:1)
所以,我根据上面的评论重新构建了代码。 BinaryTreeData现在有一个SubItems List。 您将不得不调整XAML / local中的命名空间:BinaryTreeData,它应该工作.. 干杯!
<强> BinaryTreeData:强>
public class BinaryTreeData : INotifyPropertyChanged
{
private int _ownID;
private int _parentID;
public int ownID
{
get { return this._ownID; }
set
{
this._ownID = value;
this.onChange("ownID");
}
}
private List<BinaryTreeData> _subitems = new List<BinaryTreeData>();
public List<BinaryTreeData> Subitems
{
get { return _subitems; }
}
public event PropertyChangedEventHandler PropertyChanged;
private void onChange(string propertyName)
{
if (PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
<强> XAML:强>
<TreeView x:Name="myTreeView">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:BinaryTreeData}" ItemsSource="{Binding Subitems}">
<TextBlock Text="{Binding Path=ownID}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<强>代码隐藏:强>
public MainWindow()
{
InitializeComponent();
List<BinaryTreeData> myBinaryData = new List<BinaryTreeData>();
BinaryTreeData parent1 = new BinaryTreeData() { ownID = 1 };
parent1.Subitems.Add(new BinaryTreeData { ownID = 2 });
parent1.Subitems.Add(new BinaryTreeData { ownID = 3 });
BinaryTreeData parent2 = new BinaryTreeData() { ownID = 4 };
parent2.Subitems.Add(new BinaryTreeData { ownID = 5 });
parent2.Subitems.Add(new BinaryTreeData { ownID = 6 });
myBinaryData.Add(parent1);
myBinaryData.Add(parent2);
myTreeView.ItemsSource = myBinaryData;
}