我有一个简单的视图模型,其中一个属性包含模型,另一个属性包含模型列表。
我可以毫无问题地绑定“Test”模型的属性,但无法让 XAML 识别“ListModel”包含具有其自己的属性的列表。我已经查看了几个示例,了解如何设置视图模型并在将列表绑定到视图之前正确初始化列表,虽然 XAML 理解“ListModel”是一个属性,但我无法让它识别出它是一个属性。列表,因此它不会编译,这样我至少可以看看它是否不是智能感知可能因某种原因而失败。
这是有问题的视图模型,其列表名为“ListModel”
public class TestViewModel
{
public TestModel Test { get; } = new TestModel();
public List<TestListModel> ListModel { get; set; }
public TestViewModel()
{
Initialize();
}
public void Initialize()
{
ListModel = new List<TestListModel>();
ListModel.Add(new TestListModel
{
ListProp1 = "First",
ListProp2 = "Second",
ListProp3 = "Third"
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是正在放入列表中的模型。视图似乎没有看到这些属性。
public class TestListModel
{
public string ListProp1 { get; set; }
public string ListProp2 { get; set; }
public string ListProp3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我当前的 XAML。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiApp1.MainPage"
xmlns:local="clr-namespace:ViewModels"
x:DataType="local:TestViewModel"
>
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<!--This works-->
<Entry Text="{Binding Test.Property1}"/>
<Entry Text="{Binding Test.Property2}"/>
<Entry Text="{Binding Test.Property3}"/>
<!--This does not work-->
<ListView
ItemsSource="{Binding ListModel}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding ListProp1}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)
对于任何偶然发现这一点的人:评论中的杰森已经回答了这个问题。修复方法只是从 XAML 顶部删除 x:DataType,但我没有从中删除“xmlns:local”。
我拥有的是一个视图模型,其中不止一个模型,这在删除 x:DataType 时似乎扰乱了智能感知。删除它最初会阻止应用程序编译,因为它找不到我在 XAML 中拥有的属性。一旦我清理并重建了解决方案,它就可以顺利编译并运行。