2016-01-06 81 views
0

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

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

你不能像这样在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"/> 
2

您应该添加一个XAML IValueConverter来绑定您的场景中的图像.Converter会将Base64String转换为位图图像。

添加一个带有接口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"/> 

希望现在正在显示图像定义键,该转换器。

相关问题