Listview Xamarin表单列表视图绑定问题
我对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
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表单