我知道在这种事情上有几个争论。 无论如何,我有几种情况需要根据WCF服务返回的枚举来填充ComboBox项目。
为了保持代码清洁,我开始采用这种方法。在进一步研究之后,我认为最初没有考虑到这一点......
我正在抛出这些内容,以获取有关如何执行此操作或目前如何执行此操作的建议/建议/代码段。
我可能被迫有一个单独的,非匿名的方法,程序。我讨厌这样做的事情,但此刻,不要看到它以另一种方式工作......
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本地var,但在同一方法中,并不总是ComboBox最初的意图,但还不能真正验证。我可以为它添加一个标签来进行一些测试并填充以进行验证。
对不起,如果不清楚的话。如果需要,我可以详细说明。
感谢。
答案 0 :(得分:1)
我这样做是这样的:
var query = from t in GetFreshContext().Employee select t;
var dsQuery = (DataServiceQuery<Employee>)query;
dsQuery.BeginExecute(result =>
{
ComboEmployees.ItemsSource = dsQuery.EndExecute(result).ToArray();
}, null);
ComboEmployees.DisplayMemberPath = "FullName";