Jaki jest najlepszy sposób przekazania obrazu w usłudze WCF, a po jego przejściu, wyświetl go w datagrid z?Przechodzenie obrazu przez WCF i wyświetlanie ich w datagrid WPF
Odpowiedz
Nie mówię, że jest to jedyna czy najlepszym rozwiązaniem, ale mamy to działa tak:
Co trzeba zrobić, to:
utworzyć metodę WCF, że wróci obraz przez jakiś id lub cokolwiek innego. Należy zwrócić tablicę bajtów (byte []):
public byte[] GetImage(int id)
{
// put your logic of retrieving image on the server side here
}
W swojej klasie danych (obiekty wyświetlane w siatce) czynią nieruchomość obrazu, jego rodzicielka powinna wywołać metodę WCF i przekonwertować tablicę bajtów do 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
}
}
}
W szablonie komórek (lub gdziekolwiek) położyć kontrola obrazu i związania jej właściwość źródła do własności obraz utworzony powyżej:
<DataTemplate> <!-- Can be a ControlTemplate as well, depends on where and how you use it -->
<Image
Source={Binding Image, IsAsync=true}
/>
</DataTemplate>
najprostszy sposób nie zrobić UI darmo ze podczas pobierania obrazów ustawia właściwość IsAsync na false, tak jak ja. Ale jest wiele do poprawienia. Na przykład. możesz pokazać animację ładowania podczas ładowania obrazu.
Pokazanie czegoś podczas ładowania czegoś innego można zrealizować za pomocą PriorityBinding (możesz przeczytać o tym tutaj: http://msdn.microsoft.com/en-us/library/ms753174.aspx).
Jak wyświetlić animację podczas ładowania obrazu? –
Zaktualizowałem odpowiedź – arconaut
To tylko dobra odpowiedź, jeśli zdjęcia są małe .. w zależności od rozmiaru obrazu, jeśli są duże lub jeśli jest duża liczba próśb, to rozwiązanie nie zadziała –
Czy można załadować obraz WPF ze strumienia? Jeśli tak, możesz napisać usługę WCF, aby zwrócić typ System.IO.Stream.
Nie wiem, dlatego pytam –
Możesz wysłać strumień jako część wiadomości, o ile strumień jest oznaczony jako jedyna część Treść wiadomości Wszystkie inne pola wiadomości będą musiały przejść do nagłówka – SaguiItay
- 1. WPF Łączenie Datagrid i wyświetlanie kolumn
- 2. Rekursywnie przechodzenie przez drzewo katalogów i wyświetlanie nazw plików
- 3. Zapobieganie WPF 4,0 DataGrid wyświetlanie pustą kolumnę
- 4. Datagrid WPF: konwerter i StringFormat
- 5. WPF DataGrid stylu Silverlight DataGrid?
- 6. Edytowalny Datagrid w WPF
- 7. opcje sortowania i filtrowania w WPF Datagrid?
- 8. Konwertuj i używaj DataTable w WPF DataGrid?
- 9. Wstępne sortowanie DataGrid w WPF
- 10. Przechodzenie przez katalogi hdfs
- 11. Przechodzenie przez końcówki instrukcji Linq
- 12. Data formatowanie w WPF DataGrid
- 13. Jak odświeżyć datagrid w WPF
- 14. Wyczyść wartości datagrid w wpf
- 15. WPF DataGrid wklejając
- 16. IsSelected Wiązanie w WPF DataGrid
- 17. Wyświetlanie obrazu w Jade
- 18. WPF ToolKit DataGrid Wydajność
- 19. Problem Wpf DataGrid
- 20. Scal komórki w WPF DataGrid
- 21. Czy DataGrid jest koniecznością w WPF?
- 22. wpf datagrid combobox kolumna
- 23. DataFrid WPF DataGrid RowHeader
- 24. WPF: Kopiowanie z DataGrid
- 25. C# Konwertery WPF DataGrid
- 26. WPF Datagrid - automatyczne odświeżanie
- 27. Podstawy WPF DataGrid AlternatingRowBackground i RowStyle
- 28. DataGrid WPF Wirtualizacja i poleceń CanExecute
- 29. Jak autoprzewijanie na datagrid WPF
- 30. Jak wybrać All CheckBox kolumny przez DataGrid nagłówka CheckBox w WPF DataGrid
Jak duże są przeciętnie zdjęcia, z którymi masz do czynienia? Ile z nich musisz załatwić jednym telefonem? Istnieje kilka dobrych rozwiązań na Twoje pytanie, ale to naprawdę zależy od ilości informacji, które masz do czynienia w każdym połączeniu. Zwrócenie go jako tablicy bajtów jest dobrym rozwiązaniem tylko wtedy, gdy twoje obrazy będą stosunkowo małe i nie będziesz musiał zwracać ich dużej liczby na raz (pytam, ponieważ wstawiasz je do datagridu, więc załóżmy, że możesz odzyskać pewną liczbę z usługi –