我有一个ListView的问题。我希望每个Cell都有一个标签和一个开关,但标签的文本不会出现。
这是我的代码:
public class FilterPage : ContentPage
{
public FilterPage()
{
List<FilterCell> listContent = new List<FilterCell>();
foreach(string type in Database.RestaurantTypes)
{
FilterCell fc = new FilterCell();
fc.Text = type;
listContent.Add(fc);
}
ListView types = new ListView();
types.ItemTemplate = new DataTemplate(typeof(FilterCell));
types.ItemsSource = listContent;
var layout = new StackLayout();
layout.Children.Add(types);
Content = layout;
}
}
public class FilterCell : ViewCell
{
private Label label;
public Switch CellSwitch { get; private set; }
public String Text{ get { return label.Text; } set { label.Text = value; } }
public FilterCell()
{
label = new Label();
CellSwitch = new Switch();
var layout = new StackLayout
{
Padding = new Thickness(20, 0, 0, 0),
Orientation = StackOrientation.Horizontal,
HorizontalOptions = LayoutOptions.FillAndExpand,
Children = { label, CellSwitch }
};
View = layout;
}
}
如果我在FilterCell-Constructor中输入一个固定的Text,它可以正常工作(例如:label.Text =“Hello World”)
当我为ItemSelected-Event创建一个Method并读出SelectedItem.Text属性时,我得到了我指定为Value的文本,但它从未显示过。我尝试运行此代码时仅显示开关。
感谢您的帮助 尼科
答案 0 :(得分:3)
哦,小伙子。这段代码看起来像强奸(对不起,我不得不这样说)。
现在让我们看看错误:
原因是您正在混合数据并查看严重。
该行
types.ItemTemplate = new DataTemplate(typeof(FilterCell));
表示:&#34;对于列表中的每个项目(ItemsSource
),请创建新的过滤器单元格&#34;。您在循环中创建的FilterCell
永远不会显示。
轻松修复
public class FilterPage : ContentPage
{
public FilterPage()
{
var restaurantTypes = new[] {"Pizza", "China", "German"}; // Database.RestaurantTypes
ListView types = new ListView();
types.ItemTemplate = new DataTemplate(() =>
{
var cell = new SwitchCell();
cell.SetBinding(SwitchCell.TextProperty, ".");
return cell;
});
types.ItemsSource = restaurantTypes;
Content = types;
}
}
SwitchCell
,请使用它。ItemsSource
,您必须使用数据。在您的情况下,餐厅类型列表。我只是用静态列表嘲笑它们。SwitchCell
并为Text属性设置数据绑定。这是View和数据之间的神奇胶水。 &#34;。&#34;将其绑定到数据项本身。我们使用它,因为我们的列表包含字符串项,Text应该是字符串。 (阅读关于数据绑定:https://developer.xamarin.com/guides/xamarin-forms/getting-started/introduction-to-xamarin-forms/#Data_Binding)StackLayout
。您可以直接将列表设置为页面的Content
。<强>课强>