我试图找出如何绑定一个未知大小的列表或数组(无论哪个更容易,或者是可能的)到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里面有整数。
2条答案
按热度按时间k4aesqcs1#
您正在绑定此:
而且毫无意义。列表应该绑定到嵌套的ListView ItemSource,然后将标签绑定到“”。(如果你发现它是必需的-使用转换器)。
(Btw编写时的提示,如果您没有设置“DataType”,Release将显示空白ListView,而调试将正常工作,所以请记住这一点,如果它不是学校的项目)
另外我建议用CollectionView代替ListView。你应该检查一下它们的区别。
h7wcgrx32#
我发现你用的是
public List<int> Bands { get; set; }
,然后你把它绑定到<Label Text="{Binding Bands}" />
上。您可以将
Label
更改为CollectionView
或ListView
。请确保使用正确的数据类型。