Wpf 我可以绑定文本块';在可观察的集合中,是否仅将内容转换为字符串的一部分?
我对WPF比较陌生,所以如果有一个明显或简单的答案我没有看到,我表示歉意 我有一个可观察的项目集合,每个项目有几个不同大小的图像。 每个图像的相对路径为字符串格式,图像文件存储在不同的子文件夹中 图像路径的格式为:Wpf 我可以绑定文本块';在可观察的集合中,是否仅将内容转换为字符串的一部分?,wpf,string,binding,path,observablecollection,Wpf,String,Binding,Path,Observablecollection,我对WPF比较陌生,所以如果有一个明显或简单的答案我没有看到,我表示歉意 我有一个可观察的项目集合,每个项目有几个不同大小的图像。 每个图像的相对路径为字符串格式,图像文件存储在不同的子文件夹中 图像路径的格式为: imagepath = @"subfolder/subfolder/filename.png" 我希望能够绑定到textblock,但只显示每个图像下的文件名,而不更改图像路径。这可能吗?我想它需要某种转换器,但我一直在努力,因为我找不到一种合理的方式来只显示字符串的一部分 谢谢你
imagepath = @"subfolder/subfolder/filename.png"
我希望能够绑定到textblock,但只显示每个图像下的文件名,而不更改图像路径。这可能吗?我想它需要某种转换器,但我一直在努力,因为我找不到一种合理的方式来只显示字符串的一部分
谢谢你的帮助
编辑
为了澄清,我的“值”是非静态的,引用可观察集合中的项,例如
ObservableCollection<Icon> items = new ObservableCollection<Item>();
items.Add(new Item{imagename = "someimagename",
imagepath= "somefolder/somesubfolder/somefilename.png"}) etc...
但是我得到了一个未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例
谢谢您需要获得a的帮助才能获得此值 创建一个实现IValueConverter的类,并在Convert方法中返回要显示的字符串部分
在TextBlock中,您绑定到属性,如由指定的
{Binding Path=imagepath,Converter={StaticResource getFilenameFromPathConverter}}
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();
}
}
谢谢-这是朝着正确方向迈出的一大步,尽管我发现我需要不带扩展的GetFileName,而不仅仅是GetFileName。然而,我的“值”是非静态的,引用可观察集合中的项(请参见编辑)谢谢,是的,我也这么认为-拥有XAML很好,但实际上我正在与转换器斗争(请参见编辑),但由于@ZahidI get“非静态字段、方法或属性需要对象引用…”这是假定您的意思是这样做:
returnsystem.IO.Path.GetFileName(item.imagepath.ToString())
@Chris你能把你的文本框“Text”绑定表达式(XAML)粘贴到这里吗?好的,按照以下说明1)在转换器的“convert”方法上放置一个断点。2) 当断点点击时,检查正在传递的“value”参数。如果“value”参数等于您的文件路径,那么就好了。如果不让我知道。3) 如果步骤2通过,则清空convert方法并仅添加以下行:return Path.GetFileNameWithoutExtension(value.ToString());试一试。这与你的“值”是静态的或非静态的无关。那不是matter@Chris:看,在WPF转换器中不需要这样做。参数“value”不需要转换为Item,这意味着不需要:Item Item=作为Item的值;字符串文件名=item.imagepath.ToString();只需在转换器中逐个字符粘贴以下内容(只需复制/粘贴),就可以了:)。返回System.IO.Path.GetFileNameWithoutExtension(value.ToString());
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();
}
}