WCF,Xamarin - CS0029无法隐式转换为System.Collections.ObjectModel.ObservableCollection

时间:2018-01-04 20:06:44

标签: c# wcf observablecollection

我的WCF服务之间出现转换问题,返回ObservableCollection并处理结果以填充ListView。

因此,在WCF和PCL项目中,我在Model文件夹中都有这个Temoignage.cs

    public class Temoignage
    {
        public string Nom { get; set; }
        public string Prenom { get; set; }
        public int Note { get; set; }
        public string Texte { get; set; }
    }

WCF服务返回此

public ObservableCollection<Temoignage> GetTemoignage()
        {
            ObservableCollection<Temoignage> TemoignageList = new ObservableCollection<Temoignage>();

            con.Open();
            SqlCommand cmd = new SqlCommand("Select U.nom, U.Prenom, T.note, T.texte from dbo.Temoignages T inner join Users U on U.id = T.iduser where T.validation = 1;", con);
            SqlDataReader reader = cmd.ExecuteReader();

            if (reader.HasRows)
                while (reader.Read())
                {
                    Temoignage temoignage = new Temoignage
                    {
                        Nom = reader.GetString(0),
                        Prenom = reader.GetString(1),
                        Note = reader.GetInt32(2),
                        Texte = reader.GetString(3)
                    };
                    TemoignageList.Add(temoignage);
                }

            return TemoignageList;
        }

接收它的ViewModel

    public ObservableCollection<Temoignage> TemoignagesList { get; set; }
....
public void Temoignages()
        {

            BasicHttpBinding binding = CreateBasicHttp();
            this.client1 = new BienEtreServiceClient(binding, EndPoint);
            this.instance = ((IBienEtreService)client1.InnerChannel);

            client1.GetTemoignageCompleted += ClientOnGetTemoignageCompleted;

            client1.GetTemoignageAsync();
        }



        public void ClientOnGetTemoignageCompleted(object sender, GetTemoignageCompletedEventArgs e)
        {   // The problems starts here
            ObservableCollection<Temoignage> TemTest = e.Result;

            foreach (Temoignage item in TemTest)
            {
                TemoignagesList.Add(item);
            }

        }

我想我可以在ClientOnGetTemoignageCompleted中,只需从WCF获取ObservableCollection,并在我已经存在的TemoignagesList(绑定到XAML)中添加元素。 但不,不。即使模型在两个项目中都包含相同的元素。

e。我需要的结果包含元素,我只是不知道如何阅读它们。 equals to this when ClientOnGetTemoignageCompleted is executed

我错过了一个重点吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我想我自己找到了,使用我的wcf服务模型而不是客户端模型

//using BienEtre.Models;
using BienEtreWcfService;

现在可以使用并将元素添加到列表中。

public void ClientOnGetTemoignageCompleted(object sender, GetTemoignageCompletedEventArgs e)
        {

            foreach (Temoignage item in e.Result)
            {
                TemoignagesList.Add(item);
            }

        }

不确定我理解,但它确实有效!

我也使用List而不是ObservableCollection。