Xceed propertygrid未显示DisplayName

时间:2015-08-17 14:40:32

标签: c# wpf propertygrid xceed

我在我的项目中使用Xceed propertygrid,出于某种原因,当我打开属性的下拉列表时,它显示了" Xceed.Wpf.Toolkit.PropertyGrid.Attributes.Item" 而不是我插入的项目。 我确信这是因为toString()方法被调用,我只是无法弄清楚为什么.. 我看到了这个问题 WPF Xceed PropertyGrid showing "Xceed.Wpf.Toolkit.PropertyGrid.Attributes.Item" instead of the real DisplayName ,这正是我的问题,但似乎并没有得到解决方案。我尝试了许多尝试解决方案,但没有工作。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以覆盖ToString方法以显示您想要的任何属性,例如,假设我们将以下类作为SelectedObject控件的propertyGrid

public class Company
{
    [Category("Main")]
    [DisplayName("Name")]
    [Description("Property description")]
    public String Name { get; set; }
    [Category("Main")]
    [DisplayName("Type")]
    [Description("Property description")]
    public String Type { get; set; }
    [Category("Main")]
    [DisplayName("Something")]
    [Description("Property description")]
    public bool Something { get; set; }
    [Category("Main")]
    [DisplayName("Director")]
    [Description("Property description")]
    [ItemsSource(typeof(EmployeList))]
    public Employe Director { get; set; }
}

该集合应定义如下

 public class EmployeList : IItemsSource
{
    public Xceed.Wpf.Toolkit.PropertyGrid.Attributes.ItemCollection GetValues()
    {
        Xceed.Wpf.Toolkit.PropertyGrid.Attributes.ItemCollection employe = new Xceed.Wpf.Toolkit.PropertyGrid.Attributes.ItemCollection();
        employe.Add(new Employe()
        {
            Name = "Name1",
            Rank = "Rank1",
            Age=40,
        }); employe.Add(new Employe()
        {
            Name = "Name2",
            Rank = "Rank2",
            Age=40,
        }); employe.Add(new Employe()
        {
            Name = "Name3",
            Rank = "Rank3",
            Age=40,
        });
        return employe;
    }
}

并且Employe类应覆盖Tostring方法

  public class Employe
{        
    public String Name { get; set; }
    public String Rank { get; set; }
    public int Age { get; set; }
    public override string ToString()
    {
        return Name;
    }
}

XAML

<xctk:PropertyGrid  Name="pg"  SelectedObject="{Binding SelectedCompany}" AutoGenerateProperties="True" >                
    </xctk:PropertyGrid>

结果就是你要找的东西

output