C# 在xamarin c中以编程方式绑定listview#

C# 在xamarin c中以编程方式绑定listview#,c#,.net,xamarin,xamarin.forms,C#,.net,Xamarin,Xamarin.forms,我想在Xamarin portable中创建一个listview, listview的项目源是List,listview的my datatemplate是通过此函数准备的 private DataTemplate createItemtemplate() { try { Label lbl_binding = new Label() { TextColor = Color.Red, FontSize

我想在Xamarin portable中创建一个listview, listview的项目源是
List
,listview的my datatemplate是通过此函数准备的

private DataTemplate createItemtemplate()
{
    try
    {
        Label lbl_binding = new Label()
        {
            TextColor = Color.Red,
            FontSize = 16,
            VerticalTextAlignment = TextAlignment.Center,
            HorizontalOptions = LayoutOptions.CenterAndExpand,
        };
        lbl_binding.SetBinding(Label.TextProperty, ".");
        StackLayout stkBottom = new StackLayout()
        {
            Orientation = StackOrientation.Horizontal,
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.Center,
            Padding = new Thickness(0),
        };
        stkBottom.Children.Add(lbl_binding);
        ViewCell vc = new ViewCell() {
            View = stkBottom
        };

        DataTemplate Dp = new DataTemplate(() =>
        {
            return vc;
        });
        return Dp;
    }
    catch (Exception ex)
    {
        return null;
    }
}
现在,我的列表视图已填充,但是所有的标签都填充了最后一个项目,我的意思是没有正确填充项目,但是所有项目都只填充了最后一个项目。 我做错了什么

lstAdmin = new ListView()
{
    ItemTemplate = createItemtemplate(),
};
lstadmin.Itemsource = source;

将listview从List更改为ObservableCollection。这应该可以完成工作。

下面的代码对您很有用,可以作为参考

参加课程成员:

   public class Dummy
    {

    public string Id { get; set; }
    public string Img { get; set; }
    public string Title { get; set; }
    public string SubTitle { get; set; }
    public string Count { get; set; }
    public string Status { get; set; }

    }
   ObservableCollection<Dummy> productItems = new 
   ObservableCollection<Dummy>();
   productItems.Add(new Dummy() { Name = "0", Img = "Avatar.png", 
   Title = "Total Books", SubTitle = "Desc", Count = "50", Status = 
   "Total" });

   productItems.Add(new Dummy() { Id = "1", Img = "Avatar.png", Title 
   = "Out of Stock Books", SubTitle = "Desc", Count = "40", Status = 
   "OutStock" });
   ListView listview = new ListView()
        {
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            SeparatorVisibility = SeparatorVisibility.None,
            RowHeight = 30,
        };
listview.ItemTemplate = new DataTemplate(typeof(cell));
listview.ItemSelected += listviewItemSelected;
创建一个可观察的收集列表:

   public class Dummy
    {

    public string Id { get; set; }
    public string Img { get; set; }
    public string Title { get; set; }
    public string SubTitle { get; set; }
    public string Count { get; set; }
    public string Status { get; set; }

    }
   ObservableCollection<Dummy> productItems = new 
   ObservableCollection<Dummy>();
   productItems.Add(new Dummy() { Name = "0", Img = "Avatar.png", 
   Title = "Total Books", SubTitle = "Desc", Count = "50", Status = 
   "Total" });

   productItems.Add(new Dummy() { Id = "1", Img = "Avatar.png", Title 
   = "Out of Stock Books", SubTitle = "Desc", Count = "40", Status = 
   "OutStock" });
   ListView listview = new ListView()
        {
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            SeparatorVisibility = SeparatorVisibility.None,
            RowHeight = 30,
        };
listview.ItemTemplate = new DataTemplate(typeof(cell));
listview.ItemSelected += listviewItemSelected;
声明列表视图:

   public class Dummy
    {

    public string Id { get; set; }
    public string Img { get; set; }
    public string Title { get; set; }
    public string SubTitle { get; set; }
    public string Count { get; set; }
    public string Status { get; set; }

    }
   ObservableCollection<Dummy> productItems = new 
   ObservableCollection<Dummy>();
   productItems.Add(new Dummy() { Name = "0", Img = "Avatar.png", 
   Title = "Total Books", SubTitle = "Desc", Count = "50", Status = 
   "Total" });

   productItems.Add(new Dummy() { Id = "1", Img = "Avatar.png", Title 
   = "Out of Stock Books", SubTitle = "Desc", Count = "40", Status = 
   "OutStock" });
   ListView listview = new ListView()
        {
            VerticalOptions = LayoutOptions.FillAndExpand,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            SeparatorVisibility = SeparatorVisibility.None,
            RowHeight = 30,
        };
listview.ItemTemplate = new DataTemplate(typeof(cell));
listview.ItemSelected += listviewItemSelected;
获取ViewCell并在ViewCell中设计您的UI并分配绑定

    public class cell : ViewCell
    {
        public cell()
        {
            Image img = new Image()
            {
                VerticalOptions = LayoutOptions.StartAndExpand,
            };

            img.SetBinding(Image.SourceProperty, new Binding("Img"));

            Label lbltitle = new Label()
            {
                VerticalOptions = LayoutOptions.Start,
                TextColor = Color.Black
            };

            lbltitle.SetBinding(Label.TextProperty, new 
           Binding("Title"));

            Label lbldesc = new Label()
            {
                VerticalOptions = LayoutOptions.Start,
                TextColor = Color.Black
            };

            lbldesc.SetBinding(Label.TextProperty, new 
            Binding("SubTitle"));

            StackLayout lblstack = new StackLayout()
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                Children = { lbltitle, lbldesc },
            };
            BoxView boxEdit = new BoxView()
            {
                VerticalOptions = LayoutOptions.Start,
                HorizontalOptions = LayoutOptions.End,
                Color = Color.Black,
                HeightRequest = 20,
                WidthRequest = 10
            };

            tapGestureEdit.Tapped += tapGestureEditTapped;
            Label lblCount = new Label()
            {
                VerticalOptions = LayoutOptions.CenterAndExpand,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                TextColor = Color.Black
            };
            lblCount.SetBinding(Label.TextProperty, new 
            Binding("Count"));
            StackLayout stackCount = new StackLayout()
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                HorizontalOptions = LayoutOptions.EndAndExpand,
                Children = { boxEdit, lblCount },
            };
            StackLayout stackMain = new StackLayout()
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                Children = { img, lblstack, stackCount },
                Orientation = StackOrientation.Horizontal,
                Margin = new Thickness(10, 10, 10, 10)
            };
            View = stackMain;
        }
     }

这段代码对我有效删除了模板并使用了此单元格,我仍然不明白为什么数据模板不起作用

我也遇到了同样的问题,经过一些测试,我找到了如何不总是获取最后一项的方法

您应该将标签创建和所有其他元素作为
ItemTemplate
放入
DataTemplate
的lambda中,如下所示(示例代码):


希望这对我有所帮助。

请编辑您的问题,并向我展示您如何填写列表。以及如何将此数据模板设置为listview@Thava我想问题出在
listview.ItemsSource=source
。您只需定义一次ItemsSource属性,然后将iTen添加到其中。非常推荐您使用它作为绑定,遵循MVVM模式,避免这种困难,但我们可以处理它。尝试在构造函数中设置
listview.ItemsSource=new List()
,然后像
((List)listview.ItemsSource)那样将iTen添加到它中。添加(“stringToAdd”)
谢谢@Diego,但仍然存在相同的问题到底发生了什么,伙计?!最后一次尝试:发布所有代码xaml、代码隐藏和其他类(如果有的话)。我将尝试在此处重现相同的错误谢谢,不幸的是创建了一个视图单元格显示了一些错误,我已经在控件中应用了这些错误,还添加了一个渲染器