.Net Maui -绑定到数组还是列表?

thtygnil  于 2023-03-20  发布在  .NET
关注(0)|答案(2)|浏览(159)

我试图找出如何绑定一个未知大小的列表或数组(无论哪个更容易,或者是可能的)到xaml只在xaml代码。列表(或数组,如果它工作)驻留在LTEInfo的类。它的大小是未知的,所以我不能提供一个标签的每一个元素。
XAML:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:CellularSignal1"
             x:Class="CellularSignal1.SignalInfo"
             x:DataType="local:SignalInfo"
             Title="Signal">
    <CollectionView ItemsSource="{Binding lteInfos}">
        <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="local:LTEInfo">
                <Grid Margin="0,10">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Label Grid.Row="0" Text="{Binding Pci,StringFormat='PCI: {0:F0}'}"/>
                    <ListView Margin="20">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <StackLayout Orientation="Horizontal">
                                    <Label Text="{Binding Bands}" />
                                </StackLayout>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Grid>

            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</ContentPage>

LTE信息:

namespace CellularSignal1
{
    public class LTEInfo : ConnectionCellInfo, IEquatable<LTEInfo>
    {
        public LTEInfo() : base()
        {
        }

        public int Rssi { get; set; }
        public int Rsrp { get; set; }
        public int Rsrq { get; set; }
        public int Level { get; set; }
        public List<int> Bands { get; set; }
       
   }
}

主要:

namespace CellularSignal1
{
  public ObservableCollection<LTEInfo> lteInfos { get; set; } = new ObservableCollection<LTEInfo>();
  public class implementation1
  {
    LTEInfo lte = new() 
    {
          Pci = pci,
          Level = strength.Level,
          Rssi = strength.Rssi,
          Rsrp = strength.Rsrp,
          Rsrq = strength.Rsrq,
          Bands = new List<int>() {3, 4, 5}
     };
     lteInfos.add(lte);
  }
}

我当前的输出什么也没显示,尽管我知道Bands里面有整数。

k4aesqcs

k4aesqcs1#

您正在绑定此:

<Label Text="{Binding Bands}" />

而且毫无意义。列表应该绑定到嵌套的ListView ItemSource,然后将标签绑定到“”。(如果你发现它是必需的-使用转换器)。
(Btw编写时的提示,如果您没有设置“DataType”,Release将显示空白ListView,而调试将正常工作,所以请记住这一点,如果它不是学校的项目)
另外我建议用CollectionView代替ListView。你应该检查一下它们的区别。

h7wcgrx3

h7wcgrx32#

我发现你用的是public List<int> Bands { get; set; },然后你把它绑定到<Label Text="{Binding Bands}" />上。
您可以将Label更改为CollectionViewListView。请确保使用正确的数据类型。

相关问题