Я работаю над некоторым приложением, которое использует элемент управления TreeView для представления бизнес-объектов. В настоящее время связь между бизнес-объектами и TreeNodes поддерживается через свойство Tag TreeNode. Я не очень доволен этим, потому что я думаю, что ссылка не достаточно "жесткая". Например, может существовать объект TreeNode без бизнес-объекта, также я хочу обновить изображение TreeNode в зависимости от состояния бизнес-объекта. Поэтому я получил свой собственный специальный класс TreeNode из TreeNode:
class ActionTreeNode : TreeNode
{
private Action mAction;
public Action Action
{ get ... }
public ActionTreeNode(Action action)
: base()
{
if (action == null) throw new ArgumentNullException("action", "Paramter action must not be null.");
mAction = action;
}
public void UpdateState()
{
switch (mAction.ActionState)
{
case ActionState.Passed:
SelectedImageIndex = 3;
ImageIndex = 3;
break;
case ActionState.Failed:
SelectedImageIndex = 2;
ImageIndex = 2;
break;
...
}
return;
}
}
При таком минимальном подходе мне приходится каждый раз вызывать свойство или метод базового класса, который возвращает объект TreeNode, как в «(ActionTreeNode) myNode.Parent». Решением было бы переопределить / перезаписать каждый метод или свойство и вернуть объект типа ActionTreeNode.
Как вы думаете, более ли подходит минимальный подход или вы попытаетесь переопределить все методы, свойства, чтобы избежать приведения? Спасибо.