用于Windows Store应用程序的ListView中绑定图像的值转换器

时间:2014-11-22 20:52:27

标签: c# xaml listview windows-runtime ivalueconverter

我正在尝试将本地/隔离存储中的图像绑定到 Windows 8.1商店应用中的ListView。路径(或文件名)存储在从数据库获取的ObservableCollection中的对象中。

我可能在想这里太简单了,但理解下面的“奇怪”行为将是将图像传递到ListView的关键。我确实找到了一些使用值转换器进行图像绑定的示例,但它们适用于Silverlight应用程序。

-

工作

尝试将图像从独立存储绑定到XAML中的ImageSource,这可以:

在页面

<ImageBrush ImageSource="{Binding ImagePath}" />

在ViewModel中

ImagePath = "ms-appdata:///local/" + _currentCustomer.ImgPath;

-

不工作

然而,以下(这将有助于我实现我的ListView)不起作用,虽然它似乎产生与XAML ImageSource绑定完全相同的结果( ms-appdata:/// local / image。 JPG ):

在页面中(ImgPath是客户对象的属性,基本上是文件名)

<ImageBrush ImageSource="{Binding currentCustomer.ImgPath, Converter={StaticResource imageFileConverter}}" />

并在ViewModel中

public class ImageFileConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        string fileName = value as string;
        if (fileName != null)
        {
            String imagePath = "ms-appdata:///local/" + fileName;
            return imagePath;
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

和App.xaml

<converters:ImageFileConverter:  x:Key="imageFileConverter"/>

-

有什么区别,或者(更好)需要做什么?

1 个答案:

答案 0 :(得分:1)

由于我不能没有这个,我一直在学习并想出来。如果以编程方式设置,则ImageSource需要作为BitmapImage提供。转换器需要按如下方式进行更改:

public class ImageFileConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        string fileName = value as string;

        if (fileName != null)
        {
            BitmapImage bitmap = new BitmapImage();
            bitmap.UriSource = new Uri("ms-appdata:///local/" + fileName);
            return bitmap;
        }
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}