簡體   English   中英

.Net MAUI 視圖找不到 observble 集合屬性

[英].Net MAUI view can not find observble collection properties

我有一個帶有 CollectionView 的 xaml 視圖。 ItemSource 設置為在 xaml.cs class 中啟動的列表。 xaml 視圖找不到綁定屬性“Id”。 如果我從 model 中刪除 id,我會收到與“ListName”相同的錯誤。

綁定:在“TestApp.Shared.Items.ViewModels.MainViewModel”上找不到屬性“Id”。

我四處尋找,發現了這個 但修復並沒有解決我的問題。 有人知道問題可能是什么嗎? 我在用:

 <PackageReference Include="CommunityToolkit.Mvvm" Version="8.0.0"/>

編碼:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="TestApp.Shared.Items.MainPage"
             xmlns:viewmodel="clr-namespace:TestApp.Shared.Items.ViewModels"
             x:DataType="viewmodel:MainViewModel">


     <CollectionView
        x:Name="CollectionOfListNames"
        ItemsSource="{Binding ListNames}">

        <CollectionView.ItemTemplate>

            <DataTemplate>

                <Grid
                    x:DataType="viewmodel:MainViewModel"
                    Padding="0,5">

                    <Grid x:DataType="viewmodel:ListModel" ColumnDefinitions="2" Padding="0,5">

                        <Label Grid.Column="0"  Text="{Binding Id}" />
                        <Label Grid.Column="1"  Text="{Binding ListName}" />
                    </Grid>
                </Grid>

            </DataTemplate>

        </CollectionView.ItemTemplate>

    </CollectionView>

</ContentPage>

    namespace TestApp.Shared.Items.ViewModels
    {
        public partial class MainViewModel : ObservableObject
        {
    
            [ObservableProperty]
            ObservableCollection<ListModel> listNames;
    
            public MainViewModel()
            {
                ListNames = new ObservableCollection<ListModel>()
                {
                    new ListModel(){ Id = 0, ListName = "Matlista"},
                    new ListModel(){ Id = 1, ListName = "Räkningar"},
                    new ListModel(){ Id = 2, ListName = "Att köpa idag"}
                };
            }
        }
    }

namespace TestApp.Shared.Items.Models
{
    public partial class ListModel : ObservableObject
    {
        private int id;

        public int Id
        {
            get => id;
            set => SetProperty(ref id, value);
        }

        private string listName;

        public string ListName
        {
            get => listName;
            set => SetProperty(ref listName, value);
        }
    }
}

您還必須在DataTemplate內部的Grid上設置x:DataType="viewmodel:MainViewModel" ,但現在為ListModel object。

所以:


    <DataTemplate>
        <Grid x:DataType="model:ListModel" ColumnDefinitions="2" Padding="0,5">
            <Label Grid.Column="0"  Text="{Binding Id}" />
            <Label Grid.Column="1"  Text="{Binding ListName}" />
         </Grid>
    </DataTemplate>

請注意, ListModel位於不同的命名空間中,因此請相應地添加正確的xmlns

現在 XAML 編譯會認為所有的孩子都在使用MainViewModel ,因此它(正確地)找不到這些屬性。

DataTemplate內部, scope 更改,在您的情況下為ListModel ,我們需要讓 XAML 編譯知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM