TreeViewコントロールを使用してビジネスオブジェクトを表すアプリケーションに取り組んでいます。現在、ビジネスオブジェクトとTreeNodeの間のリンクは、TreeNodeのTagプロパティを介して維持されています。リンクが十分に「タイト」ではないと思うので、私はこれにあまり満足していません。たとえば、ビジネスオブジェクトのない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;
}
}
この最小限のアプローチでは、「(ActionTreeNode)myNode.Parent」のようにTreeNodeオブジェクトを返す基本クラスのプロパティまたはメソッドを呼び出すたびにキャストする必要があります。解決策は、すべてのメソッドまたはプロパティをオーバーライド/上書きし、ActionTreeNodeタイプのオブジェクトを返すことです。最小限のアプローチを取る方が適切だと思いますか、それともキャストを避けるためにすべてのメソッド、プロパティを再実装する努力をしますか?ありがとう。