CollectionView 未在 .net MAUI 中显示内容

CollectionView not displaying content in .net MAUI

提问人:jxalexan 56 提问时间:11/8/2023 更新时间:11/8/2023 访问量:43

问:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MonkeyFinder.TopicsPage"
             xmlns:model="clr-namespace:MonkeyFinder.Model"
             xmlns:viewmodel="clr-namespace:MonkeyFinder.ViewModel"
             xmlns:control="clr-     namespace:Syncfusion.Maui.ProgressBar;assembly=Syncfusion.Maui.ProgressBar">

<CollectionView BackgroundColor="Transparent">

    <CollectionView.ItemTemplate>

        <DataTemplate>

            <Image Source="traffic_light.png"/>

        </DataTemplate>

    </CollectionView.ItemTemplate>
    
</CollectionView>

嗨,这里的 .net MAUI 初学者,试图在选项卡式页面中创建具有数据绑定的 collectionview,但无法显示内容。简化了 CollectionView,但仍然无法显示 collectionview 中的任何内容。我知道collectionview是可见的,因为当我更改collectionview的背景颜色时,页面的颜色会发生变化。如果内容页面位于 collectionview 之外,我还可以看到内容页面中的内容。不知道我做错了什么:/

C# .NET XAML 毛伊

评论

0赞 Jason 11/8/2023
您没有设置ItemsSource
0赞 jxalexan 56 11/8/2023
即使我不进行数据绑定,我是否也必须设置 ItemsSource?
0赞 Jason 11/8/2023
是的,没有 就没有行可以显示ItemsSource

答:

0赞 Julian 11/8/2023 #1

CollectionView 不是布局。它是数据集合的容器,因此得名。

如果要显示问题代码中的图像,只需使用 Grid 或 VerticalStackLayout:

<Grid>
    <Image Source="traffic_light.png"/>
</Grid>

如果要使用数据绑定,则需要绑定源,例如,where 是集合元素的数据类型。ObservableCollection<T>T

假设你有一个 ViewModel,你可以创建这样一个集合,我们称之为:Items

public class MyViewModel : INotifyPropertyChanged
{
    private ObservableCollection<string> items;
    public ObservableCollection<string> Items
    {
        get => items;
        set
        {
            if(items == value) return;
            items = value;
            OnPropertyChanged();
        }
    }

    public MyViewModel()
    {
        // populate Items
        Items = new ObservableCollection<string>()
        {
            "hello", "bye", "ciao"
        };
    }

    // skipping INotifyPropertyChanged implementation for brevity
}

在 XAML 中,需要通过表达式将 设置为 CollectionView:ItemsItemsSourceBinding

<CollectionView
  ItemsSource="{Binding Items}"
  BackgroundColor="Transparent">

    <CollectionView.ItemTemplate>

        <DataTemplate>

            <Image Source="traffic_light.png"/>

        </DataTemplate>

    </CollectionView.ItemTemplate>
    
</CollectionView>

这还要求您在代码隐藏中设置页面:BindingContext

public partial class TopicsPage : ContentPage
{
    public TopicsPage()
    {
        InitializeComponent();
        BindingContext = new MyViewModel();
    }
}