WPF/C#将自定义对象列表数据绑定到列表框?
由于能够将自定义对象列表的数据绑定到WPF中的WPF/C#将自定义对象列表数据绑定到列表框?,c#,wpf,list,listbox,listboxitems,C#,Wpf,List,Listbox,Listboxitems,由于能够将自定义对象列表的数据绑定到WPF中的列表框,我遇到了一些麻烦 这是自定义对象: public class FileItem { public string Name { get; set; } public string Path { get; set; } } 以下是清单: private List<FileItem> folder = new List<FileItem>(); public List<FileItem> Fol
列表框
,我遇到了一些麻烦
这是自定义对象:
public class FileItem
{
public string Name { get; set; }
public string Path { get; set; }
}
以下是清单:
private List<FileItem> folder = new List<FileItem>();
public List<FileItem> Folder { get { return folder; } }
以下是我的XAML部分:
<ListBox x:Name="listboxFolder1" Grid.Row="1" BorderThickness="0"
ItemsSource="{Binding}"/>
不幸的是,对于每个条目,唯一显示的是
MyApp.FileItem
。如何显示特定属性,如名称?最简单的方法是覆盖文件项(列表框使用此项填充每个条目)
您需要为ListBox定义ItemTemplate
<ListBox x:Name="listboxFolder1" Grid.Row="1" BorderThickness="0"
ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
列表框显示的列表中的每个项目都会自动调用ToString
方法来显示它,并且由于您没有覆盖它,因此它会显示类型的名称
所以,这里有两件事你可以做
像Sayse建议的那样重写ToString
方法
分别使用和绑定每个属性
在资源中添加带有密钥的模板
<DataTemplate x:Key="fileItemTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Path}"/>
</StackPanel>
</DataTemplate>
并将其作为listbox ItemTemplate提供
<ListBox x:Name="listboxFolder1" Grid.Row="1" BorderThickness="0" ItemsSource="{Binding}" ItemTemplate="{StaticResource fileItemTemplate}">
如果现在有人通过搜索发现这个问题,我只是在一个C#UWP应用程序中遇到了几乎相同的问题
虽然上面Nitin的答案中的XAML位是必要的,但它们并不能单独解决这个问题——我还必须将我的等价的文件夹
更改为可观察的集合
,而不是列表
,以使列表框显示我所需的属性。那么问题是什么呢?绑定没有绑定?列表框显示错误的文本?“有错误吗?”Sayse编辑道。对不起,我应该提到到底发生了什么。非常感谢你的链接,那个家伙知道如何清楚地解释事情。谢谢,这很有效。我更喜欢XAML版本,但这个版本也很好地完成了任务,就像你说的——它很简单。我只是想让ToString()保持打开状态,以便处理可能需要返回路径名或路径名组合的其他事项。区别在于,在显示多个列表框时,这将起作用:)不用担心
<DataTemplate x:Key="fileItemTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Path}"/>
</StackPanel>
</DataTemplate>
<ListBox x:Name="listboxFolder1" Grid.Row="1" BorderThickness="0" ItemsSource="{Binding}" ItemTemplate="{StaticResource fileItemTemplate}">