问题描述
我已经转换图片为base64字符串,并在SQLite数据库保存为公共字符串ProfileImage {搞定;组; }
我想形象绑定到一个列表视图,我没有约束力的名称和地址。
XAML
< ListBox.ItemTemplate>
<&DataTemplate的GT;
<网格和GT;
< Grid.ColumnDefinitions>
< ColumnDefinition WIDTH =自动/>
&所述; ColumnDefinition宽度=*/>
< /Grid.ColumnDefinitions> <边框背景={ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}保证金=0,10,0,0Grid.Column =0的HorizontalAlignment =左>
<图像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数据库存储列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!