从listview中的字节绑定图像(Windows Phone 8.1)

时间:2016-01-14 13:15:48

标签: c# listview windows-phone-8.1

我正在开发我的第一个Windows Phone 8.1应用程序。我需要在列表视图中绑定图像。图像采用 bytes [] 格式。我已经使用此函数

转换为位图图像
replacementString = replacementString.replace(replacementString.charAt(i), inputAnswerChar)

现在我需要将此图像绑定到listview项目中的图像控件。

这是我的XAML代码。图像控件名称为( img_test

public async Task<BitmapImage> GetImageFromByteArray(string s_FileName)
    {
        using (InMemoryRandomAccessStream raStream = new InMemoryRandomAccessStream())
        {
            using (DataWriter writer = new DataWriter(raStream))
            {
                byte[] data = await GetImageBytes(s_FileName);
                writer.WriteBytes(data);
                await writer.StoreAsync();
                await writer.FlushAsync();
                writer.DetachStream();
            }

            raStream.Seek(0);
            BitmapImage bitMapImage = new BitmapImage();
            bitMapImage.SetSource(raStream);
            return bitMapImage;
        }
    }

提前致谢

修改 以下是为澄清更多内容所做的工作:

1-我使用Image Filename来使用远程Web服务获取字节数组。

2-我使用返回的<Grid> <ListView x:Name="lst_Test" Background="White" Foreground="Black" SelectionChanged="lst_BestDrivers_SelectionChanged" Margin="10"> <ListView.Resources> <DataTemplate x:Key="ItemsTest"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="15*" /> <ColumnDefinition Width="15*" /> <ColumnDefinition Width="15*" /> <ColumnDefinition Width="30" /> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="30" /> <RowDefinition Height="30" /> <RowDefinition Height="30" /> <RowDefinition Height="30" /> </Grid.RowDefinitions> <Grid Grid.Column="0" Grid.RowSpan="4" /> <Grid Grid.Column="1" Grid.ColumnSpan="5" /> <Image x:Name="img_test" Grid.Column="0" Grid.RowSpan="3" Margin="10,10,10,10" /> <TextBlock Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="5" Text="{Binding Name}"></TextBlock> <StackPanel Orientation="Horizontal" Grid.Column="2" Grid.Row="1"> <TextBlock Text="{Binding ID}" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock> <Image Source="ms-appx:///Assets/Icons/Icon1png" HorizontalAlignment="Right" VerticalAlignment="Center"></Image> </StackPanel> </Grid> </DataTemplate> </ListView.Resources> <ListView.ItemTemplate> <StaticResource ResourceKey="ItemsTest"/> </ListView.ItemTemplate> </ListView> </Grid> 来获取bytes[]对象。

如何使用此数组或位图进行绑定? 我尝试了here中的示例,但它对我不起作用,因为调用Web服务需要bitmap调用,这在实现async接口后无法实现

2 个答案:

答案 0 :(得分:0)

假设您在属性中有BitmapImage,准备绑定。您可以将图像源绑定到BitmapImage

<Image x:Name="img_test" Source="{Binding MyBitmapImage}" Grid.Column="0" Grid.RowSpan="3" Margin="10,10,10,10" />

如果您没有在属性中使用BitmapImage,那么您应该只设置对象的来源

img_test.Source = myBitmapImage

答案 1 :(得分:0)

stackoverflow 和其他网站中挖掘并查看了很多示例后,我必须解决async问题。它是使用 here 中的TaskCompletionNotifier类解决的,它允许我在实现async接口时进行ivalueconverter调用。使用上面的函数从bytes数组中获取位图图像。

我需要做的就是

    public class BytesToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        using (InMemoryRandomAccessStream raStream = new InMemoryRandomAccessStream())
        {
            return new TaskCompletionNotifier<BitmapImage>(GetImageFromByteArray((String)value));
        }
    }
}

另外,我需要使用此

添加静态资源
xmlns:Global="using:MYNAMESPACE"
<Page.Resources>
    <Global:BytesToImageConverter x:Key="LocalImageConverter" />
</Page.Resources>

BytesToImageConverter是实现ivalueconverter接口的那个。

现在,使用资源绑定图像

<Image DataContext="{Binding PhotoPath, Converter={StaticResource LocalImageConverter}}" 
               x:Name="img_test" 
               Source="{Binding Result}"
               Grid.Column="0" 
               Grid.RowSpan="3" 
               Margin="10,10,10,10" 
               Width="90"
               Height="90"
               Stretch="Fill"/>

源绑定到Result

这样就可以了。

感谢所有