只是想知道人们会怎么做。假设我有一个类创建并填充Treeview,然后将其添加到Winform。
我有另一个依赖Treeview中数据的类。因此,例如,当用户单击Treeview中的特定节点时,类b需要该节点保存的信息,以便它可以执行某些计算并显示结果。
更简单的做法是将Treeview的引用传递给第二个类,还是只传递它需要的数据?或者可以将Treeview设置为静态并使用事件,以便新类可以在单击节点时直接访问树视图?
感谢。
答案 0 :(得分:6)
我会在持有树视图的类中引发一个事件。也就是说,定义一个委托和您的类具有的事件。然后,依赖类可以订阅该事件并对事件中包含的数据进行操作。据我了解你的问题,依赖类不需要对树视图做任何事情,因此不应该知道树视图。
public delegate void YouControlHandler(int relevantData1, string relevantData2);
public class ClassContainingTreeView
{
public event YouControlHandler TreeViewClickedEvent;
public void OnTreeViewClicked(object sender, EventArgs)
{
// Handle request locally first and extract relevantData1/2
if(TreeViewClickedEvent != null)
TreeViewClickedEvent(relevantData1, relevantData2);
}
}
public class DependingClass
{
ClassContainingTreeView yourObject = new ClassContainingTreeView();
public DependingClass()
{
yourObject.TreeViewClickedEvent += new YouControlHandler(EventHandler);
}
protected void EventHandler(int relevantData1, string relevantData2)
{
// Handle event
}
}
答案 1 :(得分:5)
只需传递数据。
您不希望类与UI控件紧密耦合。
顺便说一下,为什么你认为你需要使TreeView静态以便从中消耗事件?
您可以从非静态对象订阅事件。