C# 如何在选项卡式页面中绑定内容页标题和listview
我们正在C# 如何在选项卡式页面中绑定内容页标题和listview,c#,rest,xamarin.forms,xamarin.ios,C#,Rest,Xamarin.forms,Xamarin.ios,我们正在C#,visualstudio 2017和Xamarin中开发iOS购物车应用程序。我们正在使用rest web服务,我在数据绑定方面遇到了一些问题: 如何在选项卡式页面中绑定内容页面(选项卡式页面的子页面)标题和listview 现在选项卡式页面工作正常,但listview不工作,请您帮助我们解决此问题,我们正在粘贴下面的代码 选项卡Page1.xaml.cs namespace SalesRep.SalesOrderPages { [XamlCompilation(XamlC
C#
,visualstudio 2017
和Xamarin
中开发iOS购物车应用程序。我们正在使用rest web服务,我在数据绑定方面遇到了一些问题:
如何在选项卡式页面中绑定内容页面(选项卡式页面的子页面)标题和listview
现在选项卡式页面工作正常,但listview不工作,请您帮助我们解决此问题,我们正在粘贴下面的代码
选项卡Page1.xaml.cs
namespace SalesRep.SalesOrderPages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class TabbedPage1 : TabbedPage
{
ObservableCollection<Class1> Filter = new ObservableCollection<Class1>();
public TabbedPage1()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
var lst = await App.TodoManager.GetItemTasksAsync("all");//this is catalog list from rest | var MyTabTitle = await App.TodoManager.GetEmployeeTasksAsync("Roudy");//this is Salerep Employee list from rest
var myArray = MyTabTitle.ToArray<Employee>();
var arraycount = MyTabTitle.Count;
int arraypos = 0;
RootObject2 rs = new RootObject2();
foreach (var i in lst)
{
var hai = JsonConvert.SerializeObject(i);
var myitem = JsonConvert.DeserializeObject<RootObject2>(hai);
var lst1 = new Class1 // Here i have created Class1 which i display tab title and cataloge item
{
FilterName=myArray[arraypos].FilterName,
Items= myitem.Catalog
};
if (arraypos < arraycount -1)
arraypos = arraypos + 1;
else
break;
Filter.Add(lst1);
}
ItemsSource = Filter;
}
}
}
namespace SalesRep.Models
{
public class Catalogcls: INotifyPropertyChanged
{
public string Type { get; set; }
public string Image { get; set; }
public string Name { get; set; }
public string UnitPrice { get; set; }
public double Price { get; set; }
public string Pack { get; set; }
}
public class RootObject2
{
public ObservableCollection<Catalogcls> Catalog { get; set; }
}
}
目录类
namespace SalesRep.SalesOrderPages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class TabbedPage1 : TabbedPage
{
ObservableCollection<Class1> Filter = new ObservableCollection<Class1>();
public TabbedPage1()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
var lst = await App.TodoManager.GetItemTasksAsync("all");//this is catalog list from rest | var MyTabTitle = await App.TodoManager.GetEmployeeTasksAsync("Roudy");//this is Salerep Employee list from rest
var myArray = MyTabTitle.ToArray<Employee>();
var arraycount = MyTabTitle.Count;
int arraypos = 0;
RootObject2 rs = new RootObject2();
foreach (var i in lst)
{
var hai = JsonConvert.SerializeObject(i);
var myitem = JsonConvert.DeserializeObject<RootObject2>(hai);
var lst1 = new Class1 // Here i have created Class1 which i display tab title and cataloge item
{
FilterName=myArray[arraypos].FilterName,
Items= myitem.Catalog
};
if (arraypos < arraycount -1)
arraypos = arraypos + 1;
else
break;
Filter.Add(lst1);
}
ItemsSource = Filter;
}
}
}
namespace SalesRep.Models
{
public class Catalogcls: INotifyPropertyChanged
{
public string Type { get; set; }
public string Image { get; set; }
public string Name { get; set; }
public string UnitPrice { get; set; }
public double Price { get; set; }
public string Pack { get; set; }
}
public class RootObject2
{
public ObservableCollection<Catalogcls> Catalog { get; set; }
}
}
名称空间SalesRep.Models
{
公共类目录CLS:INotifyPropertyChanged
{
公共字符串类型{get;set;}
公共字符串图像{get;set;}
公共字符串名称{get;set;}
公共字符串单价{get;set;}
公共双价{get;set;}
公共字符串包{get;set;}
}
公共类RootObject2
{
公共ObservableCollection目录{get;set;}
}
}
一级
namespace SalesRep.Models
{
public class Class1
{
public string FilterName { get; set; }
public ObservableCollection<Catalogcls> Items { get; set; }
}
}
名称空间SalesRep.Models
{
公共班级1
{
公共字符串筛选器名称{get;set;}
公共ObservableCollection项{get;set;}
}
}
问得好。Xamarin中的数据绑定可能会令人困惑。首先,您实现选项卡式页面的方式是错误的。选项卡式页面的工作方式是创建一个根选项卡页面,在其中设置子页面。这些子页面应该是内容页面,而不是选项卡式页面
下面是该方法的一个示例实现。请注意,标题为MyStyle、MyCuts和NewCut的页面都是内容页面。唯一的选项卡式页面是根选项卡页面,其中不包含任何视图,只有包含视图的子页面
public RootTabLayout()
{
InitializeComponent();
// TABS \\
myCuts = new MyCuts() // ContentPage
{
Icon = "cut.png",
Title = "My Cuts",
};
newCut = new NewCut(RootCutCamera) // ContentPage
{
Icon = "camera.png",
Title = "Creator"
};
myStyle = new MyStyle(UserDb, RootCutCamera) // ContentPage
{
Icon = "bowtie.png",
Title = "My Style"
};
Children.Add(MyCuts);
Children.Add(NewCut);
Children.Add(MyStyle);
}
至于绑定方面,您的实际绑定代码没有问题。您只需要添加bindingcontext,以便视图知道要绑定到什么。您需要为ContentPage设置BindingContext。这将自动为所有子页面设置绑定上下文,如果您需要不同项目的不同绑定上下文,则可以为每个视图分别设置它们
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinPOC.ViewModel,assembly=YourApp.ReplaceWithLocalNamespace"
x:Class="YourApp.ContentPage1"
Title="Summary List"
BindingContext="YourApp.SalesRep.Models" // set binding context of the content page>
有关数据绑定的更多信息:
谢谢您的回复,我正在努力,如果我有任何问题,请告诉您。嗨,您解决了问题吗?