我一直在尝试在listview中填充数据模板,但它没有显示任何内容。我的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="BlueDemo.ScoreDisplay">
<ContentPage.Content>
<StackLayout>
<ListView x:Name="listView" Grid.ColumnSpan="2">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.7*"/>
<ColumnDefinition Width="0.3*"/>
</Grid.ColumnDefinitions>
<Label Text="{Binding name}" FontAttributes="Bold"/>
<Label Text="{Binding score}" Grid.Column ="1"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
public partial class ScoreDisplay : ContentPage
{
public static List<int> Score = new List<int>();
public static List<string> Name = new List<string>();
public string[] nme = new string[10];
public static int[] scr = new int[10];
public ObservableCollection<Data> mySource{get;set;}
public ScoreDisplay()
{
InitializeComponent();
BindingContext = this;
nme = Name.ToArray();
scr=Score.ToArray();
mySource = new ObservableCollection<Data>();
for(int i=0;i<nScore.Count;i++)
{
mySource.Add(nnew Data {name = nme[i], score =
scr[i].ToString()});
}
listView.ItemsSource = mySource;
}
}
public class Data
{
public string name { get; set; }
public string score { get; set; }
}
我有两个从其他页面获取值的列表(名称和分数)。我不确定如何使用listview的Name和Score绑定它们中的每个值。编辑:工作代码
原因:
Label.Text是一个字符串。但是在你的类Data
中,属性名称是List
。
解:
请参阅以下代码。
public class Data
{
public string name { get; set; }
public string score { get; set; }
}
public ObservableCollection<Data> mySource { get; set; }
List<int> ScoreList = new List<int>();
List<string> NameList = new List<string>();
public ScoreDisplay ()
{
InitializeComponent();
BindingContext = this;
NameList.Add("jack");
// or you can set the list with the other part of the app
ScoreList.Add(60);
//...
mySource = new ObservableCollection<Data>();
for (int i=0;i<ScoreList.Count;i++)
{
mySource.Add(new Data { name = NameList[i], score = ScoreList[i].ToString()});
}
listView.ItemsSource = mySource;
}
你错过了在ListView xaml中绑定的ItemSource。添加此行而不是
<ListView x:Name="listView" Grid.ColumnSpan="2">
至
<ListView x:Name="listView" ItemsSource="{Binding DataDisplay}" Grid.ColumnSpan="2">
public partial class MainPage : ContentPage
{
List<ScoreModel> ScoreList = new List<ScoreModel>();
List<NameModel> NameList = new List<NameModel>();
public MainPage()
{
InitializeComponent();
NameList.Add(new NameModel { Name = "Name1", Id = 0 });
NameList.Add(new NameModel { Name = "Name2", Id = 1 });
ScoreList.Add(new ScoreModel { Id = 0, Score = 1 });
ScoreList.Add(new ScoreModel { Id = 1, Score = 2 });
var DataDisplay = new List<Data>();
foreach (var item in NameList)
{
foreach (var item1 in ScoreList)
{
if(item.Id==item1.Id)
{
DataDisplay.Add(new Data { name = item.Name, score = item1.Score });
}
}
}
listView.ItemsSource = DataDisplay;
}
}
public class Data
{
public string name { get; set; }
public int score { get; set; }
}
public class NameModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ScoreModel
{
public int Id { get; set; }
public int Score { get; set; }
}
你的xaml:
<StackLayout>
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.7*" />
<ColumnDefinition Width="0.3*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding name}" Grid.Column="0"
FontAttributes="Bold" />
<Label Text="{Binding score}"
Grid.Column="1" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
希望这可以解决您的问题。