我希望显示社交媒体时间线帖子as shown in this image这是我的ListView代码,目前由于某些错误没有显示任何内容。
<StackLayout>
<ListView x:Name="LvTimeLine">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.15" />
<RowDefinition Height="0.35" />
<RowDefinition Height="0.20" />
<RowDefinition Height="0.10" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.15" />
<ColumnDefinition Width="0.25" />
<ColumnDefinition Width="0.20" />
<ColumnDefinition Width="0.50" />
</Grid.ColumnDefinitions>
<BoxView Grid.Row="0" Grid.Column="0">
<Image x:Name="Imagedp" Source="{Binding ProfilePic}" HeightRequest="70" WidthRequest="70" />
</BoxView>
<BoxView Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3">
<Label Text="{Binding ProfileName}" />
</BoxView>
<BoxView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4">
<!--post image-->
<Image x:Name="ImagePostImage" Source="{Binding PostImage}" HeightRequest="250" />
</BoxView>
<BoxView Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="4">
<!--Details-->
<Label Text="{Binding PostDesc}" />
</BoxView>
<BoxView Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3">
<!--Category-->
<Label Text="{Binding PostCat}" />
</BoxView>
<BoxView Grid.Row="3" Grid.Column="3">
<!--Like button-->
<Label Text="Like - Comment - Share" />
</BoxView>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
这是我的ListList.cs类,我在listview中绑定了它。
public class PostList
{
public int Id { get; set; }
public string ProfilePic { get; set; }
public string ProfileName { get; set; }
public string PostImage { get; set; }
public string PostDesc { get; set; }
public string PostCat { get; set; }
}
此外,我已在我的列表视图中声明了3条记录
public TabActiveForms()
{
InitializeComponent();
LvTimeLine.ItemsSource = new List<PostList>
{
new PostList() { Id=1, ProfileName = "Uzair", ProfilePic = "D1.jpg", PostCat = "Sports", PostDesc = "Lahore Stadium", PostImage = "P1.jpg"},
new PostList() { Id=2, ProfileName = "Tasmeer", ProfilePic = "D2.jpg", PostCat = "Sports", PostDesc = "Karachi Stadium", PostImage = "P2.jpg"},
new PostList() { Id=3, ProfileName = "Aamna", ProfilePic = "D3.jpg", PostCat = "Home", PostDesc = "Talagang Stadium", PostImage = "P3.JPG"},
};
}
答案 0 :(得分:0)
首先,您应该使用ObservableCollection<PostList>
代替List<PostList>
其次,您的模型应该实现INotifyPropertyChanged。
我建议将PropertyChanged.Fody用于INPC
答案 1 :(得分:0)
对于静态(如问题标题中所述)listview集合,没有严格要求使用ObservableCollection
。只要内容是静态的,使用普通List
或array
就可以了。 ObservableCollection
确保您的ListView
在收集更改时收到通知。 INotifyPropertyChanged
界面可确保您的ViewCell
可以响应对象本身的更改。请参阅ListView ItemsSource上的Xamarin文档。
将List
更改为ObservableCollection
对您的案例不会有太大帮助,因为您提供的代码中存在其他一些基本问题。
*
,Auto
或绝对值。有关详细信息,请参阅the documentation。BoxView
不支持子元素,因为它不是ContentView
,而是常规View
。HasUnevenRows
的{{1}}属性设置为true,或者设置适合您想要的大小的固定单元格高度。ListView
方法让Bindings工作。虽然ToString()
可能无法解决您的问题,但值得了解其工作原理,并使用ObservableCollection
界面。我也可以推荐基于Fody的INotifyPropertyChanged
包,就像亚历山德罗所说的那样。