2015-08-17 2 views
0

Я использую свойство Xceed в моем проекте, и по какой-то причине, когда я открываю раскрывающийся список свойства, он показывает «Xceed.Wpf.Toolkit.PropertyGrid.Attributes.Item» вместо элементов я вставлен. Я уверен, что потому, что вызван метод toString(), я просто не могу понять, почему .. Я видел этот вопрос WPF Xceed PropertyGrid showing "Xceed.Wpf.Toolkit.PropertyGrid.Attributes.Item" instead of the real DisplayName , это как раз моя проблема, но, похоже, он не получил решение. Я пробовал много попыток решения, но не работал. Любые предложения?Xceed propertygrid не отображается DisplayName

ответ

1

Вы можете переопределить метод 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

+0

Спасибо за ваш ответ. Я уже пробовал это решение, проблема в том, что после ввода в ItemCollection новый класс Item строится и вводится в коллекцию. Таким образом, вызываемая функция ToString по-прежнему является элементом Item. – petric