[英].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.