C# передача данных между классами



Просто интересно, как люди будут идти по этому поводу. Допустим, у меня есть один класс, который создает и заполняет Treeview, который затем добавляется в Winform.



У меня есть еще один класс, который зависит от данных в Treeview. Так, например, когда пользователь щелкает на определенном узле в Treeview, классу b требуется та информация, которую узел содержит, чтобы он мог выполнить некоторые вычисления и отобразить результат.



Не лучше ли просто передать ссылку на Treeview ко второму классу или только к тем данным, которые ему нужны? Или было бы хорошо установить Treeview как статический и использовать события так, чтобы новый класс мог получить доступ к treeview непосредственно, когда узел нажат?



Спасибо.

907   2  

2 ответов:

Я бы вызвал событие в классе, который содержит treeview. То есть определите делегат и событие, которое имеет ваш класс. Затем зависящий класс может подписаться на это событие и действовать на основе данных, включенных в событие. Как я понимаю ваш вопрос зависящий класс не должен ничего делать с treeview и поэтому не должен знать о treeview.

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
     }
}

Просто передайте данные.

Вы не хотите, чтобы класс был тесно связан с элементом управления пользовательского интерфейса.


В качестве отступления, почему вы думаете, что вам нужно сделать TreeView статическим, чтобы потреблять события из него?

Вы можете подписаться на событие из объектов, которые не являются статическими.

Comments

    Ничего не найдено.