Gra*_*ger 3 c# collections treeview winforms
我正在尝试确定将自定义类的集合绑定到TreeView的最佳方法.
我目前有两个自定义类,一个在Collection中保存,另一个在第一个类中的Collection中保存:
Collection<Device> _devices = new Collection<Device>();
class Device
{
public ulong DeviceID { get; private set; }
private List<Capability> _capabilities = new List<Capability>();
public string FriendlyName{ get; set; }
public Capability AddCapability(Capability capability)
{
_capabilities.Add(capability);
return capability;
}
public List<Capability> GetCapabilities()
{
// not safe yet
return _capabilities;
}
}
abstract class Capability
{
public uint CapabilityIndex { get; private set; }
public string FriendlyName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试TreeView显示扩展时列出功能的设备集合.
我考虑的选项包括:
有什么建议?
在处理TreeView时,我通常最终会生成一个从TreeNode继承的包装类,它包含我作为节点显示的实际对象.这样我可以绑定到TreeView,获得我需要的层次结构,而我的业务类实际上不必子类化UI组件.它在处理TreeView事件时也能很好地工作,因为您可以只检查节点的类型,并且可以不同地处理不同类型的节点 - 显示不同的UI或其他任何内容.
private class FooNode : TreeNode
{
public FooNode(Foo foo)
{
this.Text = foo.ToString(); //Or FriendlyName
this.Foo = foo;
this.Foo.Bars.ForEach(x => this.Nodes.Add(new BarNode(x)));
}
public Foo Foo
{
get;
private set;
}
}
private class BarNode : TreeNode
{
public BarNode(Bar bar)
{
this.Text = bar.ToString(); //Or FriendlyName
this.Bar = bar;
}
public Bar Bar
{
get;
private set;
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子可能正是您的第二个选项的含义.在那种情况下,我投票给第二个选项!
| 归档时间: |
|
| 查看次数: |
7504 次 |
| 最近记录: |