WPF 绑定:如何将文件路径列表中的名称绑定到 ListBox 中 TextBlock 的文本?
Posted
技术标签:
【中文标题】WPF 绑定:如何将文件路径列表中的名称绑定到 ListBox 中 TextBlock 的文本?【英文标题】:WPF Binding: How to bind a name from a list of filepaths to text of TextBlock in ListBox? 【发布时间】:2015-11-14 08:15:59 【问题描述】:我正在尝试将文件路径给定的文件名绑定到 TextBlock。文件路径存储在绑定到 ListBox 的 ItemsSourceProperty 的列表中。 TextBlock 设置为 DataTemplate。 我的问题是:如何获取没有路径和扩展名的名称并将其绑定到 TextBlock?
XAML 代码以获得更好的解释:
<ListBox Name="MyListBox" Margin="2">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以及背后的代码:
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
List<string> PathList = Directory.GetFiles(path, "*.txt").ToList();
Binding myBind = new Binding();
myBind.Source = PathList;
myListBox.SetBinding(ListBox.ItemsSourceProperty, myBind);
【问题讨论】:
【参考方案1】:如果您只想将静态列表添加到列表框,您应该这样做。
XAML:
<ListBox x:Name="lb" ItemsSource="Binding Collection">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
主窗口中构造函数背后的代码:
public MainWindow()
InitializeComponent();
List<string> l = new List<string>();
l.Add("string path 1");
l.Add("string path 2");
l.Add("string path 3");
l.Add("string path 4");
lb.ItemsSource = l;
您应该知道有更好的方法来做这些事情。老实说,我建议您查看 MVVM 并正确绑定到 ViewModel。
【讨论】:
【参考方案2】:使用转换器更改选定列表框项目的文本,该列表框项目完全路径为文件名。
在以下示例中,旁边有一个列表和一个文本框。一旦选择了一个项目,绑定到列表SelectedItem
的文本框会提取路径字符串,该字符串传递给转换器,该转换器仅返回要显示的文件名。
示例
XAML
<Window x:Class="WPFStack.ListBoxQuestions"
xmlns:local="clr-namespace:WPFStack"
xmlns:converters="clr-namespace:WPFStack.Converters"
.../>
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<converters:PathToFilenameConverter x:Key="FilenameConverter" />
<x:Array x:Key="FileNames" Type="system:String">
<system:String>C:\Temp\Alpha.txt</system:String>
<system:String>C:\Temp\Beta.txt</system:String>
</x:Array>
</StackPanel.Resources>
<ListBox Name="lbFiles"
ItemsSource="StaticResource FileNames" />
<TextBlock Text="Binding SelectedItem,
ElementName=lbFiles,
Converter=StaticResource FilenameConverter"
Margin="6,0,0,0" />
</StackPanel>
转换器
namespace WPFStack.Converters
public class PathToFilenameConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
object result = null;
if (value != null)
var path = value.ToString();
if (string.IsNullOrWhiteSpace(path) == false)
result = Path.GetFileNameWithoutExtension(path);
return result;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
return value;
转换器的ItemTemplate使用
转换器在模板中被重用
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding Converter=StaticResource FilenameConverter"/>
</DataTemplate>
</ListBox.ItemTemplate>
【讨论】:
太棒了,正是我想要的,非常感谢!以上是关于WPF 绑定:如何将文件路径列表中的名称绑定到 ListBox 中 TextBlock 的文本?的主要内容,如果未能解决你的问题,请参考以下文章
如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?
在WPF中怎么将ComboBox的下拉列表的数据进行绑定?还有能不能TXT文件中的列表?