本文介绍了绑定的base64字符串图像到Windows手机8.1 SQLite数据库存储列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经转换图片为base64字符串,并在SQLite数据库保存为公共字符串ProfileImage {搞定;组; }
我想形象绑定到一个列表视图,我没有约束力的名称和地址。

XAML

 < ListBox.ItemTemplate>
    <&DataTemplate的GT;
        <网格和GT;
            < Grid.ColumnDefinitions>
                < ColumnDefinition WIDTH =自动/>
                &所述; ColumnDefinition宽度=*/>
            < /Grid.ColumnDefinitions>            <边框背景={ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}保证金=0,10,0,0Grid.Column =0的Horizo​​ntalAlignment =左>
                <图像X:NAME =proImg来源={结合ProfileImage}拉伸=UniformToFillHEIGHT =79WIDTH =79/>
            < /边框>
            < StackPanel的Grid.Column =1保证金=14.5,0,0,0>
                < TextBlock的保证金=5,0,0,0Grid.Row =0X:NAME =NameTxtTextWrapping =自动换行文本={绑定名称}字号=32前景=白样式={ThemeResource ListViewItemTextBlockStyle}/>
                < TextBlock的保证金=5,0,0,0Grid.Row =1×:NAME =PhoneTxtTextWrapping =包装前景色=白字号=20文本={绑定地址} />
            < / StackPanel的>
        < /网格和GT;
    < / DataTemplate中>
< /ListBox.ItemTemplate>

code我曾经为base64字符串转换为其他地方的图像

 公共静态的BitmapImage Base64StringToBitmap(字符串源)
{
    VAR IMS =新InMemoryRandomAccessStream();
    VAR字节= Convert.FromBase64String(源);
    VAR dataWriter =新DataWriter(IMS);
    dataWriter.WriteBytes(字节);
    dataWriter.StoreAsync();
    ims.Seek(0);
    VAR IMG =新的BitmapImage();
    img.SetSource(IMS);
    返回IMG;
}

是否有可能像源类似的方式把它绑定

 来源={结合Base64StringToBitmap(ProfileImage)}


解决方案

您不能在XAML中调用方法绑定这样。你需要通过实施的IValueConverter,将其转换,然后绑定。您应该使用ValueConverter这样。

 公共类StringToBitmapConverter:的IValueConverter
{
    公共对象转换(对象的值,类型TARGETTYPE,对象参数,字符串语言)
    {
        如果(值!= NULL)
        {
        字符串源= value.ToString();
VAR IMS =新InMemoryRandomAccessStream();
    VAR字节= Convert.FromBase64String(源);
    VAR dataWriter =新DataWriter(IMS);
    dataWriter.WriteBytes(字节);
    dataWriter.StoreAsync();
    ims.Seek(0);
    VAR IMG =新的BitmapImage();
    img.SetSource(IMS);
    返回IMG;
        }
返回null;
    }    公共对象ConvertBack(对象的值,类型TARGETTYPE,对象参数,字符串语言)
    {
        抛出新NotImplementedException();
    }
}

和在XAML中使用此转换器这样的

 的xmlns:MyConverter =使用:您转换器的命名空间路径< Page.Resources>
    < MyConverter:StringToBitmapConverter X:键=ImageShow/>
< /Page.Resources><图像X:NAME =proImg来源={结合ProfileImage,转换器= {StaticResource的ImageShow}}拉伸=填充HEIGHT =60WIDTH =60/>

I have converted Image to base64 string and saved it in SQLite database as public string ProfileImage { get; set; } I want to bind image into a List view as I did binding Name and Address.

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>

Code I used to convert base64 String to Image in other Places

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

Is it possible to bind image source similar way to this

Source="{Binding Base64StringToBitmap(ProfileImage)}"
解决方案

You cannot call method in Xaml Binding like this. You need to convert it by implementing IValueConverter and then bind it. You should use a ValueConverter like this.

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

and use this converter in Xaml like this

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"/>

这篇关于绑定的base64字符串图像到Windows手机8.1 SQLite数据库存储列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 16:47