将base64字符串绑定到列表视图存储在Windows Phone 8.1中的SQLite数据库中

时间:2016-01-06 15:49:37

标签: c# sqlite windows-phone-8.1 base64

我已将Image转换为base64字符串,并将其作为public string ProfileImage { get; set; }保存在SQLite数据库中 我想将图像绑定到List视图,因为我绑定了Name和Address。

enter image description here

XAML

<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,10,0,0" Grid.Column="0" HorizontalAlignment="Left">
                <Image  x:Name="proImg" Source="{Binding ProfileImage}"  Stretch="UniformToFill" Height="79" Width="79"/>
            </Border>
            <StackPanel Grid.Column="1" Margin="14.5,0,0,0">
                <TextBlock Margin="5,0,0,0" Grid.Row="0" x:Name="NameTxt" TextWrapping="Wrap" Text="{Binding Name}" FontSize="32" Foreground="White" Style="{ThemeResource ListViewItemTextBlockStyle}"/>
                <TextBlock Margin="5,0,0,0" Grid.Row="1" x:Name="PhoneTxt"  TextWrapping="Wrap" Foreground="White" FontSize="20" Text="{Binding Address}" />
            </StackPanel>
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

我用来将base64字符串转换为其他位置的图像的代码

public static BitmapImage Base64StringToBitmap(string source)
{
    var ims = new InMemoryRandomAccessStream();
    var bytes = Convert.FromBase64String(source);
    var dataWriter = new DataWriter(ims);
    dataWriter.WriteBytes(bytes);
    dataWriter.StoreAsync();
    ims.Seek(0);
    var img = new BitmapImage();
    img.SetSource(ims);
    return img;
}

是否可以以与此相似的方式绑定图像源

Source="{Binding Base64StringToBitmap(ProfileImage)}"

2 个答案:

答案 0 :(得分:2)

你应该添加一个XAML IValueConverter来绑定你的场景中的图像。转换器将把Base64String转换为Bitmap Image。

添加一个带有接口IValueConverter的类,如下所示。

public class PictureConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
        {
            return null;
        }

        string item = value.ToString();

        BitmapImage objBitmapImage = new BitmapImage();
        objBitmapImage = NewViewModel.Base64StringToBitmap(item);
        return objBitmapImage;
    }

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

现在在资源字典或页面

中定义此转换器的密钥
<Page.Resources>
    <local:PictureConverter x:Key="PictureConverter"/>
</Page.Resources>

然后在XAML中绑定您的密钥

<Image  x:Name="proImg" Source="{Binding ProfileImage,Converter={StaticResource PictureConverter}}"  Stretch="UniformToFill" Height="79" Width="79"/>

希望现在正在显示图像。

答案 1 :(得分:2)

你不能像这样在Xaml Binding中调用方法。您需要通过实现IValueConverter转换它,然后绑定它。你应该像这样使用ValueConverter。

public class StringToBitmapConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value != null)
        {
        string source = value.ToString();
var ims = new InMemoryRandomAccessStream();
    var bytes = Convert.FromBase64String(source);
    var dataWriter = new DataWriter(ims);
    dataWriter.WriteBytes(bytes);
    dataWriter.StoreAsync();
    ims.Seek(0);
    var img = new BitmapImage();
    img.SetSource(ims);
    return img;
        }
return null;
    }

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

并像这样在Xaml中使用此转换器

xmlns:MyConverter="using:Your converter namespace  path"

<Page.Resources>
    <MyConverter:StringToBitmapConverter x:Key="ImageShow"/>
</Page.Resources>

<Image  x:Name="proImg" Source="{Binding ProfileImage,Converter={StaticResource ImageShow}}"  Stretch="Fill" Height="60" Width="60"/>