私は、プログラムでエントリコントロールを作成するシナリオを持っています。Messaging Center xamarinを使用して現在のオブジェクト値を設定するためのPCLフォーム
foreach (var control in FormInfo.FormElementsInfo)
{
case "textbox":
//Some code
break;
case "dropdown":
Entry objDropdown = new Entry();
objDropdown.HeightRequest = 40;
objDropdown.StyleId = Convert.ToString(control.ElementId);
objDropdown.SetBinding(Entry.TextProperty, "ElementValue",BindingMode.TwoWay);
objDropdown.BindingContext = control;
layout.Children.Add(objDropdown);
MessagingCenter.Subscribe<Picklists, string>(objDropdown, "PicklistSelected", (sender, arg) =>
{
objDropdown.Text = arg;
// I tried this too as this is two way binding. It didn't show the value.
//control.ElementValue = arg;
});
break;
}
これをクリックするとリストビューが表示されます。リストビューでオプションを選択すると、そのデータがエントリに入力されます。 しかし、これは現在のエントリでのみ選択された値を表示するはずですが、すべてのエントリの値を変更しています。
このような状況を回避する方法。選択した値に現在のエントリだけが入力されるようにします。
ご迷惑をおかけして申し訳ございません。ありがとうございました。
===より明確な質問=====
我々はエントリのn個の数を作成する場合は結合2の方法でプログラム的に制御します。他のページで何かを選択する際に、単一の入力値を変更することは可能ですか?はいの場合、これを達成する方法は?
あなたはただ一つの事実を示すだけです。あなたのエントリはすべて同じ値になっていますか?彼らがすべて同じ価値に縛られているならば、私は彼らにすべて変化を反映させることを期待します。 –
@Joshua foreach(FormInfo.FormElementsInfoのvarコントロール) \t \t \t {//上記の場合のステートメント}上記のcase文はこのforループ内にあり、すべてが同じです。各エントリは、Controlという別のオブジェクトにバインドされています。私はMessaging Centerの代わりにDelegateを使用しようとしました。私は同じシナリオを持っています。 – Dev
あなたは機能全体を投稿できますか?実装の残りの部分を見ることなく、私はループがすべてのコントロールを反復していると仮定できます。リストの「選択された」アイテムにどのようにリンクしているのか分かりません。あなたは間違いなくあなたのバインディングをforループで更新すべきではありません。それ以前にバインドすると、値が更新されるだけです。 –