2016-03-31 5 views
1

私はこれらの値を他の値と一緒に使用しています。ピンに値(int、object、string)を格納するにはもう1つスロットが必要です。カスタムピンなどを作って余分な値を保存することはできますが、可能であれば時間を節約するために、ピンに何かを保存する余分なスロットが1つあれば、コードがはるかに簡単になります。Pin(Int/string/object)の値をLabel、Adress、およびBindingcontext以外のもので使用して保存することはできますか?

   pin.Label = info1String; 
      pin.Address = info2String; 
      pin.BindingContext = info3String; 

と私のピンにinfo4Stringも格納する必要があります。値を格納するためにピンに残っている "スポット"はありますか?それとも私は唯一のものの上に使用したものですか?そうでなければ、私はカスタムピンを作る必要があります。

更新:

Dictionary<string,string> data = new Dictionary<string,string>(); 

private async Task<List<Pin>> LoadData() 
{ 
var pins = new List<Pin>(); 

var getItems = await phpApi.getInfo(); 

data.Add("info3", phoneString); 
data.Add("info4", urlString); 

foreach (var currentItem in getItems["results"]) { 


    nameString = currentItem ["name"].ToString(); 
    adressString = currentItem ["adress"].ToString(); 
    phoneString = currentItem ["phone"].ToString(); 
    urlString = currentItem ["URL"].ToString(); 

       var pin = new Pin(); 
       pin.Label = nameString; 
       pin.Address = adressString; 
       pin.BindingContext = data; 
       pin.Clicked += onButtonClicked1; 
       pins.Add (pin); 

    } 
} 

void onButtonClicked1 (object s, EventArgs a) 
    { 
     Pin pin = (Pin)s; 
    Dictionary<string,string> myData = (Dictionary<string,string>) pin.BindingContext; 
     Navigation.PushModalAsync (new DetailPage(myData["info3"], myData["info4"])); 

    } 

public DetailPage (object theInfo, object theInfo2) 
{ 
labelOne.text = theInfo; 
labelTwo.text = theInfo2; 
} 
+0

のBindingContextは、任意の複雑なオブジェクトにすることができますような、より複雑なオブジェクトを持つ - あなたは辞書、リスト、タプル、カスタムクラスを格納することができ、などそれとも、ラッパーを作成することができますあなたの他の質問で説明されているように。 – Jason

+0

それをフィルタリングしようとすると 'List objectList = new List ();'と 'objectList.Add(theID + theDescription);および' pin.BindingContext = objectList; ''((string)p。 BindingContext).Contains(filter)) 'それは私にエラーを与えます:'指定されたキャストは有効ではありません.'そして次のページでbindingcontextを押します.theID(文字列)を 'System.Collections.Generic .List 1'。ちょうど '1'の代わりに – Yannick

+0

私はピンからプッシュして私にIDを押し込むページの例のために必要ですか? public DetailPage(オブジェクトバインディング){ myText = Description.ToString(); // [1]などを追加しますか? } – Yannick

答えて

0

警告 - これはBindingContextをが意図されているものではなく、この問題を解決するための最善の方法ではありません。しかし、この方法で試してみると...

BindingContextはオブジェクトです。あなたはそれに何かを格納することができます、それを取得するときに元の型にキャストする必要があります。

string info3String = "blah"; 
... 
pin.BindingContext = info3String; 
... 
string myString = (string)pin.BindingContext; 

や辞書

Dictionary<string,string> data = new Dictionary<string,string>(); 
data.Add("info3","foo"); 
data.Add("info4","bar"); 
... 
pin.BindingContext = data; 
... 
// this part goes in your Click handler, which is where you want to get the data out again 
Dictionary<string,string> myData = (Dictionary<string,string>) pin.BindingContext; 
// myData["info3"] will contain "foo" 
// myData["info4"] will contain "bar" 
+0

私が求めていたものではありません。あなたは私のpin.BindingContextと一緒にリストを置くことができると言った私のケースでは2つの異なる文字列。ピンがクリックされた場合、後で(例えば)私がpin.Bindingcontextをnextpageにプッシュするときに、そのリストの異なる文字列をそれぞれどのように取り出すことができるでしょうか。 – Yannick

+0

'data.Add(" one "、theID); \t \t \t \t \t \t \t \t data.Add( "2"、theDescription); 'そして、私はピンが含まれている私のloaddataの機能にそれらを追加するとき、私はこのエラーを取得する:'タイプ「System.Collections.Generic.IEnumerable < Xamarin.Forms.Maps。Position> 'にメンバー' add 'が含まれておらず、最適な拡張メソッドoverload xamarin.forms.settersextensions.add ... .. xamarin.forms.bindableproperty、オブジェクトにはタイプ ' – Yannick

+0

のインスタンスが必要です。 – Jason

関連する問題