Ich nehme an, das irgendwo außerhalb Ihres geschrieben Code existiert:
string URLString;
Button URLButton;
Mit Ihrer Schleife, Sie einige Dinge falsch machen.
Zuerst fügen Sie einen Clicked-Handler für jedes Element in Ihrer "Ergebnis" -Liste hinzu. Wenn die Schaltfläche angetippt wird, wird versucht, sie alle einzeln auszulösen (Event-Handler werden als Multicast-Delegaten implementiert). Wenn einer von ihnen fehlschlägt, werden die verbleibenden nicht ausgeführt.
Zweitens referenzieren Sie URLString innerhalb des Clicked-Handlers. Dies bedeutet, dass ALLE Clicked-Handler mit dem gleichen Wert ausgeführt werden.
Drittens, da URLString außerhalb der Schleife definiert ist und Sie seinen Wert innerhalb der Schleife zuweisen, bedeutet dies, dass nach Abschluss der Schleife NUR der Wert des letzten Elements in den "Ergebnissen" angezeigt wird. Liste.
Vielleicht gibt es hier mehr Code, den Sie uns nicht gezeigt haben - wie URLString und URLButton tatsächlich innerhalb des Schleifenkörpers deklariert werden? Diese Probleme müssen jedoch behoben werden, bevor Sie erwarten können, dass Ihr Code wie vorgesehen funktioniert.
Ich habe meine "bereinigte" Version Ihres Codeausschnitts hier aktualisiert. Es ist das gleiche wie die aktualisierte Schnipsel aber nicht stumm stattdessen eine Ausnahme zu werfen, wenn eine schlechte URL schlagen:
foreach (var currentItem in getInfofromDB["results"]) {
URLstring = currentItem ["url"].ToString();
URLButton.Clicked += (object sender, EventArgs e) => {
Uri uri;
if (Uri.TryCreate(URLstring, UriKind.Absolute, out uri)) {
Device.OpenUri(uri);
}
};
}
Was ist die genaue Form von 'URLstring' – SushiHangover
regulär leer: String URLstring; – medvedo
Ich meinte den eigentlichen URI-Text, den Sie im Konstruktor verwenden, aber ich würde die folgenden Antworten verwenden und 'TryCreate' verwenden, um herauszufinden, was mit Ihrem URI-Format nicht stimmt. – SushiHangover