2016-04-15 7 views
2

Ich arbeite an Windows Store App für Windows und Tablet. Ich muss das Produkt auflisten.Wie zum Überspringen zu überprüfen Bild ist auf URL jedes Mal Windows Store App verfügbar?

Ich möchte eine Bedingung festlegen: Wenn Produktbild nicht auf URL verfügbar ist, sollte es Standardbild verwenden. Hier

ist der Code:

//get product list by service call and bind to productList. 
foreach(product item in productList) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(item.image.ToString())); 
    bool imageexist = false; 
    using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null))) 
    { 
     int imagelength = Convert.ToInt32(response.ContentLength); 
     if (imagelength > 0) 
     { 
      imageexist = true; 
     } 
     else 
     { 
      imageexist = false; 
     } 
    } 

    if (item.image == "N/A" || imageexist == false) 
    { 
     item.image = "Images/NoDataImages/ico-no-orders.png";  //default image 
    } 
} 

Hier Produkt kann 100 oder mehr sein. Also, jedes Mal, wenn es auf dem Server überprüft.

Gibt es eine andere Möglichkeit zu überprüfen, weil es fordert, jedes Mal zu überprüfen? Es verbraucht Zeiten.

Ich habe folgende Links verwiesen. Aber in allen Fällen muss ich jedes Mal anrufen, um das Bild zu überprüfen.

1- How can I check if an Image exists at http://someurl/myimage.jpg in C#/ASP.NET

2- asp.net check if imageURL exists

3- Test to see if an image exists in C#

Bitte genutzt Art und Weise vor.

+0

Warum verlassen Sie sich nicht auf die Serviceantwort - item.image == "N/A". Wenn der Server in Ihrem Fall "N/A" geantwortet hat, bedeutet dies, dass das Bild nicht verfügbar ist. Haben Sie die Kontrolle über den Serverteil? Vielleicht können Sie die Logik in Ihr Image-Steuerelement verschieben. Wenn eine Provider-URL nicht verfügbar ist oder ein anderer Fehler auftritt, kann das Standardbild angezeigt werden. –

+0

@SergeyL Es wird in allen Fällen nicht N/A zurückgegeben. Manchmal stellt es URL zur Verfügung und es kann passieren, dass das Bild nicht auf der URL ist. Das ist der Fall. –

+0

Könnten Sie es in dem Steuerelement behandeln, das das Bild anzeigt? –

Antwort

0

Sie können versuchen, INotifyProperty in Ihrer Modellklasse zu verwenden und dann Quelle als ObservableCollection festlegen. Das Füllen von Bildern kann nach der Bindungsliste in der asynchronen Methode ausgeführt werden, und NotifyProperty kann bei geladenem Bild (Serverantwort) geändert werden.

+0

Können Sie mir bitte einen Link vorschlagen, der Ihnen eine Programmierungsidee bietet? –

+0

[link] (http://stackoverflow.com/questions/1315621/implementing-inotifypropertychanged-does-a-better-way-exist) Es ist beispiels;) oder public class Modell: INotifyPropertyChanged { public SomeBindedProperty {get;} öffentlich SomeProperty {get; set { SomeBindedProperty = Wert; NotifyPropertyChanged ("SomeBindedProperty");} public-Ereignis PropertyChangedEventHandler PropertyChanged; protected void NotifyPropertyChanged (Zeichenfolgeneigenschaftsname) {if (PropertyChanged! = Null) {PropertyChanged (dies, neues PropertyChangedEventArgs (propertyName)); } } } – Elektryczny

Verwandte Themen