WPF / C#将自定义对象列表数据绑定到ListBox?
我遇到了一些墙,能够将我的自定义对象列表的数据绑定到WPF中的ListBox
。
这是自定义对象:
public class FileItem { public string Name { get; set; } public string Path { get; set; } }
这是清单:
private List folder = new List(); public List Folder { get { return folder; } }
当文件被移动,删除,重命名等时,该列表由FileSystemWatcher
填充和维护。所有列表都保留了名称和路径的轨道。
这是我在MainWindow代码隐藏文件中的内容(它现在用于测试目的的硬编码):
FolderWatcher folder1 = new FolderWatcher(); folder1.Run(@"E:\MyApp\test", "*.txt"); listboxFolder1.ItemsSource = folder1.Folder;
这是我的XAML部分:
不幸的是,唯一显示的是每个条目的MyApp.FileItem
。 如何显示名称等特定属性?
您需要为ListBox定义ItemTemplate
最简单的方法是覆盖FileItem
上的ToString
,(列表框使用它来填充每个条目)
public override string ToString() { return Name; }
列表框中显示的每个项目都会自动调用ToString
方法来显示它,并且由于您没有覆盖它,因此它会显示该类型的名称。
所以,你可以在这里做两件事。
- 像Sayse建议的那样覆盖
ToString
方法。 - 使用DataTemplate并单独绑定每个属性
在您的资源中,使用密钥添加模板
并将其作为列表框ItemTemplate
如果现在有人通过搜索遇到这个问题,我在C#UWP应用程序中遇到了几乎相同的问题。
虽然Nitin上面的答案中的XAML位是必要的,但它们并没有单独解决问题 – 我还必须将我的等效Folder
更改为ObservableCollection
而不是List
,以使ListBox显示我需要的属性。