我需要在Silverlight列表框中显示WCF服务返回值(LIST)。
创建类似的GetAllAgents类,
public class GetAllAgents
{
public List<string> FirstName { get; set; }
public GetAllAgents(List<string> firstName)
{
FirstName = firstName;
}
}
以下用于使用WCF服务的方法
public partial class AgentQueue : UserControl
{
ChatACDService.ChatACDServiceClient ChatAcdClient = new ChatACDService.ChatACDServiceClient();
public ObservableCollection<GetAllAgents> _GetAllAgents = new ObservableCollection<GetAllAgents>();
public AgentQueue()
{
InitializeComponent();
LoadAgentList();
this.AllList.DataContext = _GetAllAgents;
}
private void LoadAgentList()
{
ChatAcdClient.GetAllAgentListCompleted += new EventHandler<GetAllAgentListCompletedEventArgs>(ChatAcdClient_GetAllAgentListCompleted);
ChatAcdClient.GetAllAgentListAsync();
}
void ChatAcdClient_GetAllAgentListCompleted(object sender, GetAllAgentListCompletedEventArgs e)
{
if (e.Error != null)
{
}
else
{
// AllAgents.ItemsSource = e.Result;
_GetAllAgents.Add(new GetAllAgents(e.Result.ToList()));
}
}
我使用以下代码在XAML页面中创建列表框
<ListBox x:Name="AllList" ItemsSource="{Binding}"
DisplayMemberPath="FirstName"
Margin="403,54,0,35" HorizontalAlignment="Left" Width="101" />
但输出就像,
我需要使用ObservableCollection在Listbox中显示WCF方法的结果(返回类型是列表)。在上面的程序中需要进行哪些更改?
答案 0 :(得分:0)
实际上效果很好:
您要求显示对象GetAllAgents的成员路径“FirstName”。 但成员路径“FirstName”是字符串列表。
因此,您的XAML会显示您对它的期望:memberPath的toString()转换。
您的成员路径的默认toString是FirstName,它是一个字符串列表:System.Collection.Generic.List [System.String]
我想您的期望是您的名字列表应该是ListBox的项目来源。
因此,如果您只需要显示他们的firstName,只需替换
public ObservableCollection<GetAllAgents> _GetAllAgents = new ObservableCollection<GetAllAgents>();
通过
public ObservableCollection<string> _GetAllAgents = new ObservableCollection<string>();
和
_GetAllAgents.Add(new GetAllAgents(e.Result.ToList()));
通过
foreach (var agentName in e.Result.ToList())
{
_GetAllAgents.Add(agentName);
}
它将显示您的代理人的姓名。
如果您需要mor,那么您需要为每个代理对象和dataTemplate创建一个viewModel,让Silverlight了解您希望它显示的方式。
希望它有所帮助。