Wpf 我可以绑定文本块';在可观察的集合中,是否仅将内容转换为字符串的一部分?

Wpf 我可以绑定文本块';在可观察的集合中,是否仅将内容转换为字符串的一部分?,wpf,string,binding,path,observablecollection,Wpf,String,Binding,Path,Observablecollection,我对WPF比较陌生,所以如果有一个明显或简单的答案我没有看到,我表示歉意 我有一个可观察的项目集合,每个项目有几个不同大小的图像。 每个图像的相对路径为字符串格式,图像文件存储在不同的子文件夹中 图像路径的格式为: imagepath = @"subfolder/subfolder/filename.png" 我希望能够绑定到textblock,但只显示每个图像下的文件名,而不更改图像路径。这可能吗?我想它需要某种转换器,但我一直在努力,因为我找不到一种合理的方式来只显示字符串的一部分 谢谢你

我对WPF比较陌生,所以如果有一个明显或简单的答案我没有看到,我表示歉意

我有一个可观察的项目集合,每个项目有几个不同大小的图像。 每个图像的相对路径为字符串格式,图像文件存储在不同的子文件夹中

图像路径的格式为:

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();
    }
}