この種のことについていくつかの議論があります。 いずれにしても、WCFサービスから返された列挙型に基づいてComboBoxアイテムを設定する必要がある場合がいくつかあります。Silverlight非同期呼び出しと匿名メソッド
コードをきれいに保つため、私はこのアプローチを開始しました。それをもっと調べた後、私はこの作品が最初に考えられているとは思わないと思います...
私はこれを投げて、これを行う方法や現在のやり方に関する勧告/アドバイス/コードスニペットを得るこの。
私は、別個の、匿名ではない方法の手続きを余儀なくされるかもしれません。私たちは、その後からEVを使用できるように
EventHandler<GetEnumerationsForTypeCompletedEventArgs> ev = delegate(object eventSender, GetEnumerationsForTypeCompletedEventArgs eventArgs)
{
if (eventArgs.Error == null)
{
//comboBox.ItemsSource = eventArgs.Result;
//populate combox for display purposes (for now)
foreach (Enumeration e in eventArgs.Result)
{
ComboBoxItem cbi = new ComboBoxItem();
cbi.Content = e.EnumerationValueDisplayed;
comboBox.Items.Add(cbi);
}
// remove event so we don't keep adding new events each time we need an enumeration
proxy.GetEnumerationsForTypeCompleted -= ev;
}
};
proxy.GetEnumerationsForTypeCompleted += ev;
proxy.GetEnumerationsForTypeAsync(sEnumerationType);
は、基本的にはこの例では、我々は匿名メソッドを保持するために、EVを使用して...このような何かのためにこれをやって嫌いますが、現時点では、それは別の方法を働いて表示されません一度呼び出されたイベントからそれを削除するメソッド内で呼び出すことができます。これは、このメソッドが複数回呼び出されるのを防ぎます。
この呼び出しの前に宣言されたComboBoxのローカル変数は、同じメソッド内で宣言されているComboBoxは、もともと意図していたComboBoxとは限りませんが、まだ実際には検証できません。私はいくつかのテストを行い、検証するためにタグをつけることができます。
ご迷惑をおかけして申し訳ございません。私は必要に応じてもっと精緻化することができます。
ありがとうございました。
あなたの問題は何ですか?アイテムはComboBoxに追加されていませんか? – Andy
詳細を教えてください。どんな問題が起きているのかははっきりしていません。メソッド全体をインクルードするようにコードサンプルを展開すると、comboBox変数が宣言され割り当てられている場所を知ることができます。 –
KISS。それは単純な愚かなままにしておきます。 コンボボックスにデータを入力するために匿名メソッドを使用する必要はありません。非同期呼び出しの単純なデリゲートと各ループのaで十分です。 追加ボーナスとして、次のプログラマーにも完全に明確になります。 – mattmanser