2013-10-19 29 views
1

我有一些自定义TreenodeTypes我想用自定义值填充。他们是这样的:派生TreeNode的文本属性?

public class QuestionNode : TreeNode 
{ 
    public string Question { get; set; } 
    public new string Text 
    { 
     get { return string.Format("Question: {0}", Question); } 
    } 
} 

当我这个节点添加到树视图 “trvWhatever”:

trvWhatever.Nodes.Add(new QuestionNode { Question="WTF?"}); 

节点仍然是不可见的。树视图包含节点,但“文本” - 属性仍然为空。

我知道使用base-Property而不是“my”属性。有没有办法改变它?

回答

1

我知道使用base-Property而不是“my”属性。有没有办法改变它?

那么不是真的。问题在于它不是一个虚拟属性,而且您刚刚引入了一个具有相同名称的新属性 - 它不是以多态方式调用的。

当然比较简单的解决仅仅是自己设置Text财产......可能在构造函数中:

public class QuestionNode : TreeNode 
{ 
    private readonly string question; 

    public QuestionNode(string question) 
    { 
     this.question = question; 
     this.Text = string.Format("Question: {0}", question); 
    } 
} 

可以属性setter内改为这样做,当然:

public class QuestionNode : TreeNode 
{ 
    private string question; 

    public string Question 
    { 
     get { return question; } 
     set 
     { 
      this.question = value; 
      this.Text = string.Format("Question: {0}", question); 
     } 
    } 
} 

......但个人而言,我会坚持自己的构造函数版本,除非您有某些原因需要稍后更改问题。

+0

我一直在做“构造函数”解决方案,但预计会有更优雅的解决方案。尽管如此 –