【发布时间】:2011-07-08 07:26:39
【问题描述】:
我将再次破解这个问题 b/c 我之前发布的原始问题格式不正确,而且我没有先做足够的研究来提出一个关于 PropertyGrid 的清晰、简洁的问题。希望这会更好。
我想将此对象绑定到属性网格:
public class Analytic
{
public enum Period { Daily, Monthly, Quarterly, Yearly};
public Analytic()
{
this.Benchmark = new List<Benchmark>();
}
public List<Benchmark> Benchmark { get; set; }
public Period Periods { get; set; }
public void AddBenchmark(Benchmark benchmark)
{
if (!this.Benchmark.Contains(benchmark))
{
this.Benchmark.Add(benchmark);
}
}
}
该对象公开了两种类型的属性,一种是枚举类型,另一种是自定义类型的 Benchmark。我希望这两种类型都显示为下拉列表。我知道 PropertyGrid 会自动为基于枚举的属性创建一个下拉列表。我的问题是试图让基准列表显示为下拉列表。我想要的是让 Benchmark 的 Name 属性成为下拉列表中显示的文本。以下是 Benchmark 的代码:
public class Benchmark
{
public Benchmark(string id, string name)
{
this.ID = id;
this.Name = name;
}
public string ID { get; set; }
public string Name { get; set; }
}
尝试使用此调用代码将对象绑定到 PropertyGrid:
Analytic analytic = new Analytic();
analytic.AddBenchmark(new Benchmark("1", "BM1"));
analytic.AddBenchmark(new Benchmark("2", "BM2"));
propertyGrid1.SelectedObject = analytic;
结果如下:
在上面的屏幕截图中,您可以看到 Benchmark 对象列表正在呈现为“(集合)”。我希望每个 Benchmark 的名称都显示为 Periods 枚举的显示方式。输出将是这样的:
最大的问题是,如何做到这一点?
我见过几个“帮助”类从“System.ComponentModel.StringConverter”继承的例子,但这通常假设集合本身是一个数组或字符串的集合。有使用 StringConverter HERE(构建状态下拉列表)和 HERE(构建规则下拉列表)的很好示例。
在我的示例中,我的集合是自定义类型 Benchmark 的集合,我仍然不知道:
- 如果有任何我可以使用的基类/接口将帮助我为 Benchmark 做我需要做的事情,类似于上述两个链接对字符串类型的帮助。
- 如果网上有一个简单的好例子说明我需要完成什么
在绑定到 PropertyGrid 的对象的一些公开属性上显示非原始类型的下拉列表这样一项微不足道的任务是如此痛苦,我觉得这太疯狂了。
再次感谢任何帮助或任何正确方向的指示。
谢谢, 迈克
【问题讨论】:
标签: c# propertygrid