Я знаю, что есть пара дебатов по этому поводу.
Во всяком случае, у меня есть несколько случаев, когда мне нужно заполнять элементы ComboBox на основе перечислений, возвращаемых службой WCF.
Стремясь поддерживать чистоту кода, я начал этот подход. Изучив это больше, я не думаю, что это работает, как изначально думали ...
Я выкидываю это, чтобы получить рекомендации / советы / фрагменты кода о том, как вы это сделаете или как вы это делаете в настоящее время.
Возможно, меня заставят провести отдельную неанонимную процедуру. Я ненавижу делать это для чего-то подобного, но на данный момент не вижу, чтобы это работало по-другому ...
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 для хранения анонимного метода, чтобы затем мы могли использовать ev из метода, чтобы удалить его из событий, когда-то вызванных. Это предотвращает вызов этого метода более одного раза.
Я подозреваю, что локальная переменная ComboBox, объявленная перед этим вызовом, но в рамках одного и того же метода, не всегда изначально предназначена для ComboBox, но пока не может проверить это. Я могу добавить к нему тег, чтобы выполнить несколько тестов и заполнить его для проверки.
Извините, если это не ясно. Я могу уточнить, если нужно.
Спасибо.