Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# [Xamarin.Forms]ListView中的自定义控件_C#_Xamarin.forms - Fatal编程技术网

C# [Xamarin.Forms]ListView中的自定义控件

C# [Xamarin.Forms]ListView中的自定义控件,c#,xamarin.forms,C#,Xamarin.forms,我在使用绑定的Listview中使用自定义控件时遇到问题。 我给你我的代码,让它更具体 我的自定义控件(FridgeControl) Xaml: <ContentView.Content> <StackLayout> <Label x:Name="LabelName" Text="{Binding Source={x:Reference FridgeView}, Path=NameFridge }" />

我在使用绑定的Listview中使用自定义控件时遇到问题。 我给你我的代码,让它更具体

我的自定义控件(FridgeControl)

Xaml:

<ContentView.Content>
  <StackLayout>
     <Label x:Name="LabelName" Text="{Binding Source={x:Reference FridgeView}, Path=NameFridge }" />
  </StackLayout>
</ContentView.Content>    
我的页面(冰箱页面)

Xaml:


政务司司长:

公共部分类FridgesPages:ContentPage
{
公共可观测收集冰箱{get;private set;}
公共冰箱
{
初始化组件();
this.fredges=新的ObservableCollection()
{
新冰箱
{
Id=1,
Name=“车库”,
食品=新列表()
{
新食品
{
Id=14,
Name=“西红柿”,
类型=Models.Enum.TypeFoodEnum.Vegetal,
MaxDate=新的日期时间(2021,01,20)
},
新食品
{
Id=6,
Name=“Chicken”,
Type=Models.Enum.TypeFoodEnum.Meat,
MaxDate=新的日期时间(2021,01,15)
},
新食品
{
Id=44,
Name=“水”,
Type=Models.Enum.TypeFoodEnum.Drink,
},
}
},
新冰箱
{
Id=1,
Name=“厨房”,
食品=新列表()
{
新食品
{
Id=14,
Name=“沙拉”,
类型=Models.Enum.TypeFoodEnum.Vegetal,
MaxDate=新的日期时间(2021,01,20)
},
新食品
{
Id=6,
Name=“肉类”,
Type=Models.Enum.TypeFoodEnum.Meat,
MaxDate=新的日期时间(2021,01,15)
},
新食品
{
Id=44,
Name=“Juice”,
Type=Models.Enum.TypeFoodEnum.Drink,
},
}
}
};
BindingContext=这个;
}
}
对象冰箱:

public class Fridge
{
    public int Id { get; set; }

    public string Name { get; set; }

    public List<Food> Foods { get; set; }

    public Fridge() { }
}
公共级冰箱
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表食物{get;set;}
公共冰箱(){}
}
当我进入冰箱页面时,我有一个演员例外。 我应该怎么做才能在ListView中使用自定义控件

你能帮我找出我做错了什么吗


谢谢。

将内容视图代码更改为此

   public partial class FridgePage : ContentPage
    {

        public ObservableCollection<Fridge> Fridges { get; private set; }

        public FridgePage()
        {
            InitializeComponent();

            this.Fridges = new ObservableCollection<Fridge>(){
            new Fridge
            {
                Id = 1,
                Name = "Garage",
                Foods = new List<Food>()
                {
                    new Food
                    {
                        Id = 14,
                        Name = "Tomatoes",
                        Type = Models.Enum.TypeFoodEnum.Vegetal,
                        MaxDate = new DateTime(2021, 01, 20)
                    },
                    new Food
                    {
                        Id = 6,
                        Name = "Chicken",
                        Type = Models.Enum.TypeFoodEnum.Meat,
                        MaxDate = new DateTime(2021, 01, 15)
                    },
                    new Food
                    {
                        Id = 44,
                        Name = "Water",
                        Type = Models.Enum.TypeFoodEnum.Drink,
                    },
                }
            }
        };

        BindingContext = this;
        }
    }

并将您的代码隐藏代码更改为

   public partial class FridgePage : ContentPage
    {

        public ObservableCollection<Fridge> Fridges { get; private set; }

        public FridgePage()
        {
            InitializeComponent();

            this.Fridges = new ObservableCollection<Fridge>(){
            new Fridge
            {
                Id = 1,
                Name = "Garage",
                Foods = new List<Food>()
                {
                    new Food
                    {
                        Id = 14,
                        Name = "Tomatoes",
                        Type = Models.Enum.TypeFoodEnum.Vegetal,
                        MaxDate = new DateTime(2021, 01, 20)
                    },
                    new Food
                    {
                        Id = 6,
                        Name = "Chicken",
                        Type = Models.Enum.TypeFoodEnum.Meat,
                        MaxDate = new DateTime(2021, 01, 15)
                    },
                    new Food
                    {
                        Id = 44,
                        Name = "Water",
                        Type = Models.Enum.TypeFoodEnum.Drink,
                    },
                }
            }
        };

        BindingContext = this;
        }
    }
public部分类冰箱页面:ContentPage
{
公共可观测收集冰箱{get;private set;}
公共冰箱第页()
{
初始化组件();
this.fredges=新的ObservableCollection(){
新冰箱
{
Id=1,
Name=“车库”,
食品=新列表()
{
新食品
{
Id=14,
Name=“西红柿”,
类型=Models.Enum.TypeFoodEnum.Vegetal,
MaxDate=新的日期时间(2021,01,20)
},
新食品
{
Id=6,
Name=“Chicken”,
Type=Models.Enum.TypeFoodEnum.Meat,
MaxDate=新的日期时间(2021,01,15)
},
新食品
{
Id=44,
Name=“水”,
Type=Models.Enum.TypeFoodEnum.Drink,
},
}
}
};
BindingContext=这个;
}
}
将内容页代码更改为

   public partial class FridgePage : ContentPage
    {

        public ObservableCollection<Fridge> Fridges { get; private set; }

        public FridgePage()
        {
            InitializeComponent();

            this.Fridges = new ObservableCollection<Fridge>(){
            new Fridge
            {
                Id = 1,
                Name = "Garage",
                Foods = new List<Food>()
                {
                    new Food
                    {
                        Id = 14,
                        Name = "Tomatoes",
                        Type = Models.Enum.TypeFoodEnum.Vegetal,
                        MaxDate = new DateTime(2021, 01, 20)
                    },
                    new Food
                    {
                        Id = 6,
                        Name = "Chicken",
                        Type = Models.Enum.TypeFoodEnum.Meat,
                        MaxDate = new DateTime(2021, 01, 15)
                    },
                    new Food
                    {
                        Id = 44,
                        Name = "Water",
                        Type = Models.Enum.TypeFoodEnum.Drink,
                    },
                }
            }
        };

        BindingContext = this;
        }
    }


你的Fridge类是什么样子的?它是否有一个定义为字符串的属性名?如果你可以在数据模板中有自己的模板,为什么要在数据模板中使用自定义控件?谢谢你的回答@罗斯:我加了冰箱的东西。它确实有一个名为Name@Hammad沙比尔,我不明白你的回答。请问我应该怎样做才能正确呢?ListView不直接接受子项。它是否解决了您的问题。不是真的。因为我们的目标是使用自定义控件(FridgeControl),以便以后能够在应用程序中的其他地方重用它,而不必重写相同的代码。此外,我必须告诉您,我在开始时输入的代码中没有完整的控件(FridgeControl)。一旦它与标签/属性一起工作,我就必须对其进行丰富。因此,您可以在数据模板中定义布局,将数据模板用作静态资源,并在整个应用程序中使用。不过,我已使用自定义控件alo更新了我的答案。试试看
   public partial class FridgePage : ContentPage
    {

        public ObservableCollection<Fridge> Fridges { get; private set; }

        public FridgePage()
        {
            InitializeComponent();

            this.Fridges = new ObservableCollection<Fridge>(){
            new Fridge
            {
                Id = 1,
                Name = "Garage",
                Foods = new List<Food>()
                {
                    new Food
                    {
                        Id = 14,
                        Name = "Tomatoes",
                        Type = Models.Enum.TypeFoodEnum.Vegetal,
                        MaxDate = new DateTime(2021, 01, 20)
                    },
                    new Food
                    {
                        Id = 6,
                        Name = "Chicken",
                        Type = Models.Enum.TypeFoodEnum.Meat,
                        MaxDate = new DateTime(2021, 01, 15)
                    },
                    new Food
                    {
                        Id = 44,
                        Name = "Water",
                        Type = Models.Enum.TypeFoodEnum.Drink,
                    },
                }
            }
        };

        BindingContext = this;
        }
    }