ObservableCollection没有绑定列表框中的数据

时间:2015-07-03 12:38:49

标签: c# wpf silverlight listbox observablecollection

我需要在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" />

但输出就像,

enter image description here

我需要使用ObservableCollection在Listbox中显示WCF方法的结果(返回类型是列表)。在上面的程序中需要进行哪些更改?

1 个答案:

答案 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了解您希望它显示的方式。

希望它有所帮助。