Listview Xamarin表单列表视图绑定问题

Listview Xamarin表单列表视图绑定问题,listview,data-binding,xamarin,xamarin.forms,Listview,Data Binding,Xamarin,Xamarin.forms,我对Xamarin表单列表视图中的数据绑定有问题 我有一个类,它保存要绑定的数据,在运行时我看到对象中的数据 我创建了一个ObservableCollection,我将我的对象以循环的形式添加到其中,在运行时我看到了对象,并且在这个对象中有数据 我正在将ItemSource添加到列表和ItemTemplate中 这些项被添加到listView中,但在运行时标签名称为空 这是页面代码: using System; using System.Collections.Generic; using Pu

我对Xamarin表单列表视图中的数据绑定有问题

  • 我有一个类,它保存要绑定的数据,在运行时我看到对象中的数据
  • 我创建了一个ObservableCollection,我将我的对象以循环的形式添加到其中,在运行时我看到了对象,并且在这个对象中有数据
  • 我正在将ItemSource添加到列表和ItemTemplate中
  • 这些项被添加到listView中,但在运行时标签名称为空
  • 这是页面代码:

    using System;
    using System.Collections.Generic;
    using Punteam.GetTraderStatusApi;
    using Punteam.ReceiveTraderStatusApi;
    using Xamarin.Forms;
    using System.Threading;
    using System.Threading.Tasks;
    using Newtonsoft.Json.Schema;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Serialization;
    using Newtonsoft.Json.Linq;
    using XLabs.Forms.Controls;
    using System.Collections;
    using System.Collections.ObjectModel;
    using Punteam.RequestChatMessages;
    using Punteam.ReceiveChatMessages;
    using System.Diagnostics;
    
    namespace Punteam
    {
    
    public partial class ChatForm : ContentPage
    {
        ObservableCollection <chatDataSource> source;
        StatusAPI getStatus;
        bool KeyboardStatus = false;
    
    
        public ChatForm ()
        {
            InitializeComponent ();
            if (Device.OS == TargetPlatform.iOS) {
                txtMsg.HeightRequest = 34;
                btnTxt.HeightRequest = 34;
                btnPick.HeightRequest = 60;
            }
    
    
            double bottomOffset;
            Int32 i = 0;
            getStatus = new StatusAPI ();
            getStatus.json.memberList [0].memberId = App.memberId;
            getStatus.json.pType = Constants.pTypeTraderStatus;
            SendRequest (getStatus, Constants.pTypeTraderStatus, this);
    
    
            btnTxt.Clicked += (object sender, EventArgs e) => {
                i++;
                System.Diagnostics.Debug.WriteLine ("In button Clicked: " +   i.ToString ());
                if (Device.OS == TargetPlatform.Android) {
                    btnPick.IsVisible = true;
                }
                txtMsg.Text = "";
            };
    
    
            KeyboardHelper.KeyboardChanged += (sender, e) => {
                if (KeyboardStatus) {
                } else {
                }
                bottomOffset = mainStack.Bounds.Bottom -     textStack.Bounds.Bottom;   // This offset allows us to only raise the     stack by the amount required to stay above the keyboard. 
                    textStack.TranslationY -= e.Visible ? e.Height -       bottomOffset : bottomOffset - e.Height;  // The textStack is translated up,  and then returned to original position.
            };
        }
    
    
        public  static async Task<string> SendRequest (Object obj, String    pType, ChatForm chat)
        {
            // Get Trader status    
            String jsonSring = "";
            Utils util = new Utils ();
            jsonSring = util.deserialze (obj);
            var result = await Http.SendData (Constants.serverAddress, jsonSring, true);
            string inputStr = (string)result;
            Punteam.ReceiveTraderStatusApi.RootObject traderStatus = new    Punteam.ReceiveTraderStatusApi.RootObject ();
            traderStatus =  JsonConvert.DeserializeObject<Punteam.ReceiveTraderStatusApi.RootObject>   (inputStr);
    
            // Get Chat last messages
            ChatdAPI chatApi = new ChatdAPI ();
            chatApi.json.pType = Constants.puTypeGetChatMessages; 
            chatApi.json.memberList [0].memberId = App.memberId;
            jsonSring = "";
            jsonSring = util.deserialze (chatApi);
            result = await Http.SendData (Constants.serverAddress, jsonSring, true);
            Punteam.ReceiveChatMessages.ReceivedMemberMessages memberMessages = new Punteam.ReceiveChatMessages.ReceivedMemberMessages ();
            memberMessages = JsonConvert.DeserializeObject<Punteam.ReceiveChatMessages.ReceivedMemberMessages> (result);
    
            chat.fillChatList (memberMessages);
            return result;
        }
    
        public void fillChatList   (Punteam.ReceiveChatMessages.ReceivedMemberMessages memberMessages)
        {
            var chatLine = new chatDataSource ();
            source = new ObservableCollection<chatDataSource> ();
            Int32 chatIndex = memberMessages.MemberChatMessagesData.Count;
            for (int i = 0; i < chatIndex; i++) {
                chatLine = new chatDataSource ();
                chatLine.senderName = memberMessages.MemberChatMessagesData [i].SenderName;
                chatLine.text = memberMessages.MemberChatMessagesData [i].Message;
                source.Add (chatLine);
            }
    
            chatList.ItemsSource = source;
    
            chatList.ItemTemplate = new DataTemplate (() => {
    
    
                var name = new Label ();
    
                return new ViewCell{ View = name };
            });
        }
    
        public void txtMsgFocused (Object s, EventArgs a)
        {
            if (Device.OS == TargetPlatform.Android) {
                btnPick.IsVisible = false;
            }
        }
    
        public void txtMsgCompleted (Object s, EventArgs a)
        {
            if (Device.OS == TargetPlatform.Android) {
                btnPick.IsVisible = true;
            }
    
        }
        *
        public void sendClicked (Object s, EventArgs a)
        {
            if (Device.OS == TargetPlatform.Android) {
                btnPick.IsVisible = true;
            }
    
        }
    
        public void itemTapped (Object s, EventArgs a)
        {
            if (Device.OS == TargetPlatform.Android) {
                btnPick.IsVisible = true;
            }
        }
    
    
    }
    
    public class chatDataSource
    {
        public string senderName = "";
        public string text = "";
    }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用Punteam.GetTraderStatusApi;
    使用Punteam.ReceiveTraderStatusApi;
    使用Xamarin.Forms;
    使用系统线程;
    使用System.Threading.Tasks;
    使用Newtonsoft.Json.Schema;
    使用Newtonsoft.Json;
    使用Newtonsoft.Json.Serialization;
    使用Newtonsoft.Json.Linq;
    使用XLabs.Forms.Controls;
    使用系统集合;
    使用System.Collections.ObjectModel;
    使用Punteam.RequestChatMessages;
    使用Punteam.ReceiveChatMessages;
    使用系统诊断;
    名称空间小组
    {
    公共部分类ChatForm:ContentPage
    {
    可观测采集源;
    状态API获取状态;
    布尔键盘状态=假;
    公共聊天室表格()
    {
    初始化组件();
    if(Device.OS==TargetPlatform.iOS){
    txtMsg.HeightRequest=34;
    btnTxt.HeightRequest=34;
    btnPick.HeightRequest=60;
    }
    双底炮检距;
    int32i=0;
    getStatus=newstatusapi();
    getStatus.json.memberList[0]。memberId=App.memberId;
    getStatus.json.pType=Constants.pTypeTraderStatus;
    SendRequest(getStatus,Constants.pTypeTraderStatus,this);
    btnTxt.Clicked+=(对象发送者,事件参数e)=>{
    i++;
    System.Diagnostics.Debug.WriteLine(“在单击的按钮中:+i.ToString());
    if(Device.OS==TargetPlatform.Android){
    btnPick.IsVisible=true;
    }
    txtMsg.Text=“”;
    };
    KeyboardHelper.KeyboardChanged+=(发件人,e)=>{
    if(键盘状态){
    }否则{
    }
    bottomOffset=mainStack.Bounds.Bottom-textStack.Bounds.Bottom;//此偏移量仅允许将堆栈提升到键盘上方所需的量。
    textStack.TranslationY-=e.Visible?e.Height-bottomOffset:bottomOffset-e.Height;//将textStack向上平移,然后返回到原始位置。
    };
    }
    公共静态异步任务SendRequest(对象对象对象、字符串类型、聊天表单)
    {
    //获得交易员身份
    字符串jsonstring=“”;
    Utils util=新Utils();
    jsonstring=util.deserialze(obj);
    var result=await Http.SendData(Constants.serverAddress,jsonstring,true);
    字符串inputStr=(字符串)结果;
    Punteam.ReceiveTraderStatusApi.RootObject traderStatus=new Punteam.ReceiveTraderStatusApi.RootObject();
    traderStatus=JsonConvert.DeserializeObject(inputStr);
    //获取聊天最新消息
    ChatdAPI=newchatdapi();
    chatApi.json.pType=Constants.puTypeGetChatMessages;
    chatApi.json.memberList[0]。memberId=App.memberId;
    JSONSTRING=“”;
    jsonstring=util.deserialze(chatApi);
    结果=等待Http.SendData(Constants.serverAddress,jsonstring,true);
    Punteam.ReceiveChatMessages.ReceivedMemberMessages memberMessages=新建Punteam.ReceiveChatMessages.ReceivedMemberMessages();
    memberMessages=JsonConvert.DeserializeObject(结果);
    chat.fillChatList(memberMessages);
    返回结果;
    }
    public void fillChatList(Punteam.ReceiveChatMessages.ReceivedMemberMessages成员消息)
    {
    var chatLine=new chatDataSource();
    source=新的ObservableCollection();
    Int32 chatIndex=memberMessages.MemberChatMessagesData.Count;
    对于(int i=0;i{
    var name=新标签();
    返回新的ViewCell{View=name};
    });
    }
    public void txtMsgFocused(对象s、事件参数a)
    {
    if(Device.OS==TargetPlatform.Android){
    btnPick.IsVisible=false;
    }
    }
    public void txtMsgCompleted(对象、事件参数a)
    {
    if(Device.OS==TargetPlatform.Android){
    btnPick.IsVisible=true;
    }
    }
    *
    已单击的公用void(对象、事件参数)
    {
    if(Device.OS==TargetPlatform.Android){
    btnPick.IsVisible=true;
    }
    }
    公共无效项(对象、事件参数a)
    {
    if(Device.OS==TargetPlatform.Android){
    btnPick.IsVisible=true;
    }
    }
    }
    公共类数据源
    {
    公共字符串senderName=“”;
    公共字符串text=“”;
    }
    }
    
    发现问题: datasource类如下所示

    public class chatDataSource
    {
        public string senderName = "";
        public string text = "";
    }
    
    它的字段应该是这样的属性:

        public class chatDataSource
    {
    
        public string senderName { get; set; }
    
        public string text { get; set; }
    }
    

    在ListView中,必须将视图绑定到模型类属性

    在您的示例中,模型类“chatDataSource”具有senderName和text

    因此,xaml中的绑定应如下所示:

    <Label x:Name="labelname" Text="{Binding senderName}" /> 
    
    
    
    或Text=“{Binding Text}”


    请确保Binding属性中的名称和模型类中属性的名称应完全相同。

    One根本不绑定字段:)对,现在就绑定它的属性,除非您在UWP中,然后您可以使用编译的绑定来绑定字段:)希望有一天可以绑定到Xamarin表单