我对WPF比较陌生,如果有一个明显或简单的答案,我没有看到,请为此道歉。
我有一个ObservableCollection项目,每个项目都有几个不同大小的图像。 每个图像的相对路径是字符串格式,图像文件存储在不同的子文件夹中。
图像路径的格式为:
imagepath = @"subfolder/subfolder/filename.png"
我希望能够绑定到文本块,但只显示每个图像下方的文件名而不更改图像路径。这可能吗?我认为它需要某种类型的转换器,但我一直在努力,因为我找不到合理的方式只显示字符串的一部分。
感谢您的帮助。
修改
为了澄清,我的'值'是非静态的,引用可观察集合中的项目,例如。
ObservableCollection<Icon> items = new ObservableCollection<Item>();
items.Add(new Item{imagename = "someimagename",
imagepath= "somefolder/somesubfolder/somefilename.png"}) etc...
我只是开始掌握来自我的收藏品中的“获取”价值。填写'value.Tostring()'部分来获取item.imagepath的动态值的任何帮助都会非常感激,所以我可以使用它。
我目前一直在尝试这些方面:
class getFilenameFromPathConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{ Item item = value as Item;
PropertyInfo info = value.GetType().GetProperty("imagepath");
string filename = info.GetValue(item, null).ToString();
return System.IO.Path.GetFileNameWithoutExtension(filename); }
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但我得到一个未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。
由于
答案 0 :(得分:1)
您需要获得converter的帮助才能获得此值。
创建一个实现IValueConverter的类,并在Convert方法中返回要显示的字符串部分。
在TextBlock中,绑定到{Binding Path=imagepath, Converter={StaticResource getFilenameFromPathConverter}}
答案 1 :(得分:1)
脂肪指定的XAML。
您的转换器应如下所示:
class getFilenameFromPathConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Path.GetFileName(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}