我发现在客户端(Silverlight应用程序调用我的WCF服务)上使用AutoGeneratingColumn事件处理程序也可以。虽然不一定是对我的问题的答案,但我认为这很有用。我本来想添加评论,但代码太长了。
private void dgResults_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) {
if (e.PropertyType == typeof(byte[])) {
e.Column.Header = e.Column.Header + "_D";
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = e.Column.Header + "_E";
templateColumn.CellTemplate = (DataTemplate)Resources["imgTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["imgTemplate"];
e.Column = templateColumn;
}
}
Resources["imgTemplate"] 是在 Silverlight 的 .XAML 文件中创建的,而这段代码则是在其代码后台中。
<UserControl.Resources>
<local:BinaryArrayToURIConverter x:Key="binaryArrayToURIConverter" />
<DataTemplate x:Key="imgTemplate">
<Image x:Name="img" Source="{Binding GraphicBytes,Converter={StaticResource binaryArrayToURIConverter}}"/>
</DataTemplate>
</UserControl.Resources>
本地:指主要 XAML 声明的一部分:
xmlns:local="clr-namespace:<your namespace here>"
BinaryArrayToURIConverter的代码:
public class BinaryArrayToURIConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
MemoryStream ms = new MemoryStream((byte[])value);
BitmapImage image = new BitmapImage();
image.SetSource(ms);
return image;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
Byte[]
。您只需要在将其传递到服务或从服务中传递时将Image
转换为Byte[]
即可。这并不难,只是没有 WCF 为您处理序列化那么神奇。 - Yuckbyte[]
,所以我的评论仍然成立(只需忽略流式传输部分)。 - M.Babcock