C# [Xamarin.Forms]ListView中的自定义控件
我在使用绑定的Listview中使用自定义控件时遇到问题。 我给你我的代码,让它更具体 我的自定义控件(FridgeControl) Xaml: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 }" />
<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;
}
}