¿Cuál es la mejor manera de pasar una imagen en un servicio WCF, y después de pasarla, mostrarla en una cuadrícula de datos WPF?Pasar una imagen a través de WCF y visualizarla en una cuadrícula de datos WPF
Respuesta
No digo que esta es la única o la mejor solución, pero tenemos que trabajar de esta manera:
Lo que hay que hacer es:
crear un método de WCF que devolvería la imagen por alguna identificación o lo que sea. Debe devolver el conjunto de bytes (byte []):
public byte[] GetImage(int id)
{
// put your logic of retrieving image on the server side here
}
En su clase de datos (objetos que se muestran en la cuadrícula) hacer que una propiedad de imagen, su comprador debe llamar al método WCF y convertir la matriz de bytes a un BitmapImage:
public BitmapImage Image
{
get
{
// here - connection is your wcf connection interface
// this.ImageId is id of the image. This parameter can be basically anything
byte[] imageData = connection.GetImage(this.ImageId);
// Load the bitmap from the received byte[] array
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageData, 0, imageData.Length, false, true))
{
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = stream;
try
{
bmp.EndInit();
bmp.Freeze(); // helps for performance
return bmp;
}
catch (Exception ex)
{
// Handle exceptions here
}
return null; // return nothing (or some default image) if request fails
}
}
}
En la plantilla de celda (o donde sea) poner un control de imagen y unirse a su propiedad Source a la propiedad imagen creada anteriormente:
<DataTemplate> <!-- Can be a ControlTemplate as well, depends on where and how you use it -->
<Image
Source={Binding Image, IsAsync=true}
/>
</DataTemplate>
la forma más sencilla de hacer que la interfaz de usuario no libre Cuando recupere las imágenes, establecerá la propiedad IsAsync en false como lo hice. Pero hay mucho para mejorar. P.ej. podría mostrar alguna animación de carga mientras se carga la imagen.
Al mostrar algo mientras se carga algo más se puede lograr usando PriorityBinding (puede leer sobre esto aquí: http://msdn.microsoft.com/en-us/library/ms753174.aspx).
¿Cómo puedo mostrar la animación al cargar la imagen? –
He actualizado la respuesta – arconaut
Esta es solo una buena respuesta si las imágenes son pequeñas ... dependiendo del tamaño de la imagen. Si son grandes o si hay un gran volumen de solicitudes, esta solución no funcionará. –
¿Se puede cargar la imagen WPF en una secuencia? De ser así, puede escribir el servicio WCF para devolver el tipo System.IO.Stream.
No sé por qué le pregunto –
Puede enviar una transmisión como parte de un mensaje, siempre y cuando la transmisión esté marcada como la única parte del cuerpo del mensaje Todos los demás campos del mensaje tendrán que ir al encabezado – SaguiItay
- 1. Pasar una instancia de tipo anónimo a través de WCF
- 2. Pasar una matriz al servicio WCF a través de GET
- 3. ¿Cómo agrego múltiples controles a una DataGridTemplateColumn de una cuadrícula de datos usando wpf?
- 4. Alineación de texto en una cuadrícula de datos WPF
- 5. Desactivar tabstop entre columnas en una cuadrícula de datos WPF
- 6. Cómo enlazar una tabla en un conjunto de datos a una cuadrícula de datos WPF en C# y XAML
- 7. En WPF, ¿cómo puedo vincular una columna de cuadrícula de datos a una columna específica de una tabla de datos?
- 8. Enlace a un comando en una cuadrícula de datos
- 9. Unión de cuadrícula de datos en WPF
- 10. Cuadrícula de datos editable en WPF
- 11. Pasar datos a través de NSTimer UserInfo
- 12. Ingresar datos en una cuadrícula
- 13. WPF Enlace de cuadrícula de datos y visualización de columna
- 14. en WPF ¿Cómo hago una cuadrícula de datos se ajusta a la altura de la ventana
- 15. En WPF, ¿alguien ha animado una cuadrícula?
- 16. Programativamente trayendo una fila de cuadrícula de datos a la vista en WPF, MVVM
- 17. ¿Qué control de cuadrícula/cuadrícula en WPF?
- 18. Impedir información sobre herramientas vacía en una cuadrícula de datos wpf
- 19. mostrar imagen en una cuadrícula usando extjs
- 20. Pasar datos a una página de diseño
- 21. Pasar datos de Python a JavaScript a través de Django
- 22. ¿Cómo selecciono una sola celda en una cuadrícula de datos WPF?
- 23. ¿Cómo cambio una imagen al pasar el mouse sobre WPF?
- 24. ¿Cómo desplazo una fila de cuadrícula en WPF/XAML?
- 25. WCF dataservice security en una aplicación WPF
- 26. Al pasar una matriz a través de hidden_field_tag en Rails
- 27. Pasar una función de Javascript a través de los atributos de datos en línea
- 28. Arrastrando una imagen en WPF
- 29. agregar una imagen a una etiqueta en wpf?
- 30. Creación de una imagen clicable en WPF
¿Qué tan grande en promedio son las imágenes que está tratando? ¿Con cuántos de ellos tiene que lidiar en una sola llamada? Existen varias buenas soluciones para su pregunta, pero realmente depende de la cantidad de información que tenga que tratar en cada llamada. Devolverlo como una matriz de bytes es solo una buena solución si las imágenes van a ser relativamente pequeñas y no tiene que devolver un gran número de ellas a la vez (se lo pregunto porque lo está colocando en una cuadrícula de datos, entonces Supongo que podría estar recibiendo una cantidad de ellos del servicio. –