XAML 如何在.NET MAUI中使用ListView显示对象中的项?

v9tzhpje  于 2022-12-16  发布在  .NET
关注(0)|答案(2)|浏览(224)

我还在学习,我很难找到这个问题的解决方案。我的问题很简单,我只想显示一个简单的列表使用ListView使用MAUI。但我不能使这个工作。
这是我的代码:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Ventas_Citel.Views.SeleccionAlmacen"
             xmlns:viewmodel="clr-namespace:Ventas_Citel.ViewModels"
             x:DataType="viewmodel:SeleccionAlmacenViewModel"
             Title="SeleccionAlmacen">
    
    <ListView ItemsSource="{Binding Almacenes}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding Almacenes.nombre}"
                          Detail="{Binding Almacenes.nombre}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    
</ContentPage>

C#代码

public partial class SeleccionAlmacenViewModel : ObservableObject
{
    // aqui se debe cargar la lista
    public SeleccionAlmacenViewModel()
    {
        Almacenes = new ObservableCollection<Almacenes>
        {
            new Almacenes 
            {
                id = "1",
                nombre = "Almacen 1",
                cve = "1"
            },
                
            new Almacenes
            {
                id = "2",
                nombre = "Almacen 2",
                cve = "2"
            },
    
            new Almacenes
            {
                id = "3",
                nombre = "Almacen 3",
                cve = "3"
            }
        };
    }
    
    [ObservableProperty]
    ObservableCollection<Almacenes> almacenes;
}

我遇到的错误是在xaml文件中显示{Binding Almacenes.nombre}的地方如何显示它的项目列表?如何访问列表中的Almacenes属性?
我该怎么解决呢?
我正在努力实现这样的目标:

kyvafyod

kyvafyod1#

我通过从xaml文件中删除x:DataType解决了这个问题。
很好,不过还有另一个解决办法。
通过删除x:DataType,你也禁用了视图的编译绑定,这并不是一件坏事,但它可能有助于理解什么是编译绑定,以及它与x:DataType有什么关系:https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/compiled-bindings?view=net-maui-7.0。本质上,编译的绑定提高了绑定速度,这可以使MAUI应用更快。
除了删除x:DataType之外,您还可以将其添加到DataTemplate中。在这两种情况下,您都应该修复Almacenes的绑定:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Ventas_Citel.Views.SeleccionAlmacen"
             xmlns:viewmodel="clr-namespace:Ventas_Citel.ViewModels"
             xmlns:model="clr-namespace:Ventas_Citel.Models"
             x:DataType="viewmodel:SeleccionAlmacenViewModel"
             Title="SeleccionAlmacen">

    <ListView ItemsSource="{Binding Almacenes}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="model:Almacenes">
                <TextCell
                    Text="{Binding nombre}"
                    Detail="{Binding nombre}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

</ContentPage>

为此,您还需要添加包含Almacenes类的名称空间(因为我不知道它在代码中的何处定义,所以我只是展示一个示例,您需要自己添加正确的名称空间;对于这个例子,我假设它位于Ventas_Citel.Models)。

mwg9r5ms

mwg9r5ms2#

我通过从xaml文件中删除x:DataType解决了这个问题。

相关问题