我有这个项目我喜欢使用WPF ListView
它看起来像Winform中的PropertyGrid。我已经在网上找到了一些实现,哪个是最好的?
来自what I learn,我只能绑定一个来自DependencyObject的类,是否可以绑定一个通用的List或Dictionary,myClass将包括name,value,type(string,double,bool,lookup list) ,...)。一旦我绑定它,它将添加相关模板,例如对于查找列表,它将在celltemplate中添加组合框。
此外,我喜欢在配置文件中包含所有内容。例如我有这个配置:
Name1,Value1,string Name2,Value2,bool Name3,Value3,lookup,N3_option1,N3_option2,N3_option3,...
我的代码首先读取配置文件,然后从那里,我从数据库中读取Name1 / Name2 / Name3,在我的ListView中显示它们,从Name3中,你从(N3_option1,N3_option2,N3_option3,...)中选择值。
如果你能指出正确的方向,我会非常感激。
更新: 这是我正在看的3个例子:
DataTemplates in Action: Building a simple PropertyGrid,WPF PropertyGrid - MVVM techniques和WPF Property Grid。
“WPF Property Grid”对于像我这样的初学者来说太复杂了。就个人而言,我更喜欢“DataTemplates in Action:构建一个简单的PropertyGrid”。
它还有代码选择DataTemplate依赖于每个类属性的DataType:bool使用BooleanDataTemplate这是一个复选框;枚举使用EnumDataTemplate这是一个组合框。
我还想进一步添加自定义类型:lookup,它将显示为下拉列表,但值列表来自数据库。 e.g。
属性名称:car manufacturere,值来自“SELECT LOOKUP_VALUE FROM LOOKUP WHERE LOOKUP_KEY ='CAR_MFG'”,这将返回如下列表:丰田,福特,日产,本田,大众,宝马......
如果我有> 1个查找属性,我怎么能指定它们? LookupDataTemplate1,LookupDataTemplate2,...,然后如何在XAML Resources中指定它们。并且所有DataTemplate都是在XAML中预定义的,在这种情况下我是如何做到的。
类似于EnumToListConverter,我如何创建LookupmToListConverter1,LookupmToListConverter2?
答案 0 :(得分:1)
1)我不确定这里的问题是什么。您可以使用ListView来完成它,只需要它很好地适合您的数据。鉴于你所写的内容,这听起来很合理。
2)您可以创建一个列表或词典的DependencyProperty
并以这种方式绑定它。您还可以使用ObservableCollection<T>
类(基本上是一个通知其状态发生变化的列表)并绑定到它。您还可以使用任何其他使用INotifyPropertyChanged
的类并绑定到该类。通过模板添加组合框听起来合适。
3)听起来你需要一个类来从你的配置中读取,然后将它显示到列表视图中。这些将是您的视图模型。您可以为此创建一个实现INotifyPropertyChanged
的类。你有三个领域1)名称2)价值,3)潜在价值。名称和值都是字符串。我假设Name是单向绑定,Value是对组合框的双向绑定,其组合项绑定到Potential Values。然后,您将创建这些对象的ObservableCollection<T>
并将ListView
绑定到该对象。对此集合进行序列化和反序列化应该相对简单。