如果对象只是一个字符串,我可以正常绑定ItemsSource
,但当它是一个记录或类时,应用程序将无法启动。过了一会儿,我得到了这个错误:
System.InvalidCastException:指定的强制转换无效
下面是我的XAML标记:
<ListView x:Name="Posts">
<ListView.ItemTemplate>
<DataTemplate>
<VerticalStackLayout Spacing="25" Margin="10,0" VerticalOptions="Center">
<Frame BackgroundColor="#191919">
<VerticalStackLayout>
<VerticalStackLayout Margin="5">
<Label Text="{Binding Name}" FontSize="18" TextColor="Gray" />
<Label Text="{Binding Title}" FontSize="Large" FontAttributes="Bold" />
</VerticalStackLayout>
<Border>
<Border.StrokeShape>
<RoundRectangle CornerRadius="5" />
</Border.StrokeShape>
<Image MinimumHeightRequest="200" MaximumHeightRequest="350" Aspect="AspectFill" Source="{Binding Image}" />
</Border>
<HorizontalStackLayout Margin="0,5,0,0">
<Button ImageSource="upvote.png" BackgroundColor="Transparent" />
<Label Text="{Binding Votes}" FontSize="Medium" Margin="0, 10, 0, 0" TextColor="Gray" />
<Button ImageSource="downvote.png" BackgroundColor="Transparent" />
</HorizontalStackLayout>
</VerticalStackLayout>
</Frame>
</VerticalStackLayout>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
下面是绑定代码:
List<Data> items = new() { new Data("User", "Lorem ipsum dolor sit amet", "21", "<Image url>") };
Posts.ItemsSource = items;
我做错了什么?
1条答案
按热度按时间62lalag41#
是的,你需要在你的
<DataTemplate>
中添加<ViewCell>
,代码如下:我发现你在项目中添加了两个按钮(
upvote
和downvote
),所以我强烈建议你使用MVVM模式。然后你可以将ICommand
添加到页面的ViewModel中,并将其绑定到按钮。此外,如果您想在更改绑定属性的值时更新UI(例如
Votes
),您可以为ViewModel实现接口INotifyPropertyChanged
,并为属性调用事件OnPropertyChanged
。本人创建了一个demo并实现了此功能,可以参考以下代码:
1.为
Data.cs
实现INotifyPropertyChanged
并添加属性Votes
,如下所示:Data.cs
2.为页面创建视图模型(MyViewModel.cs)
3.使用示例:
主页.xaml
MainPage.xaml.cs