我有一个简单的视图模型,其中一个属性包含模型,另一个属性包含模型列表。
我能够毫无问题地绑定“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"
});
}
}
这是要放入列表中的模型。视图似乎看不到这些属性。
public class TestListModel
{
public string ListProp1 { get; set; }
public string ListProp2 { get; set; }
public string ListProp3 { get; set; }
}
这是我的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>
3条答案
按热度按时间qfe3c7zg1#
对于任何无意中发现这个的人:Jason在评论中已经回答了这个问题,修复方法只是从XAML的顶部删除x:DataType,尽管我没有删除“xmlns:local”。
我拥有的是一个视图模型,其中包含不止一个模型,这似乎在删除x:DataType时扰乱了智能感知。删除它最初会阻止应用程序编译,因为它找不到我在XAML中拥有的属性。一旦我清理并重建了解决方案,它就可以顺利编译和工作。
nqwrtyyt2#
view
和viewmodel
通常通过XAML中定义的数据绑定连接,视图的BindingContext
通常是viewmodel
的示例,所以我认为您忘记了用BindingContext
连接这两个元素。视图背后的代码:
Xaml中的代码:
结果:
Reference link .
tuwxkamq3#
我能够修复这个错误,同时通过使ItemSource绑定到一个带有私有支持字段的列表来保持编译后的绑定。看起来编译器在没有私有属性的情况下无法正确解析列表。在我添加listModel之后,它被编译了。所以问题似乎是setter丢失了。