WPF图像UriSource,数据绑定和缓存

时间:2011-11-10 20:47:12

标签: .net wpf xaml data-binding

我目前正在使用数据绑定WPF图像:

<Image Source="{Binding ThumbFile}" />

简单足够。

现在,为此Image添加缓存(我希望能够在加载后操作/删除本地文件)。我发现你可以在。

中的标签上添加一个CacheOption =“OnLoad”
<Image>
    <Image.Source>
        <BitmapImage UriSource="{Binding Path=ThumbFile, Converter={StaticResource myConverter2}}"  />
    </Image.Source>
</Image>

然后我必须有一个转换器将本地文件转换为BitmapImage。

<local:LocalUriToImageConverter x:Key="myConverter2"/>

public class LocalUriToImageConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
        {
            return null;
        }

        if (value is string)
        {
            value = new Uri((string)value);
        }

        if (value is Uri)
        {
            System.Windows.Media.Imaging.BitmapImage bi = new System.Windows.Media.Imaging.BitmapImage();
            bi.BeginInit();
            //bi.DecodePixelWidth = 80;
            bi.DecodePixelHeight = 60;                
            bi.UriSource = (Uri)value;
            bi.EndInit();
            return bi;
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

出于某种原因,这甚至都没有开始起作用。没有错误,但控件似乎没有绑定。即使控件创建了许多实例,也无法获得ThumbFile属性和转换器的get中的断点。切换回另一个Image Source标记可以正常工作。

2 个答案:

答案 0 :(得分:0)

我无法从您的代码中看出发生了什么,但我会使用Snoop深入了解它,看看发生了什么。您应该能够看到任何绑定错误,并查看DataContextImage的内容,并确保DataContext上的ThumbFile属性符合您的预期。

答案 1 :(得分:0)

我遇到了同样的问题,并且在BitmapImage的UriSource属性上使用时,从未找到过使用任何转换器进行绑定的方法。我认为以这种方式使用并不意味着。

但是,我认为以下代码是等效的,应该适用于您的情况(在我的工作中):

<Image Source="{Binding ThumbFile, Converter={StaticResource myConverter2}}" />