当绑定表达式有下标“[0]”时,.net maui未在标签中显示文本(绑定)

7lrncoxx  于 2023-05-08  发布在  .NET
关注(0)|答案(1)|浏览(166)

我有一个应用程序,我显示任务。
当你双击一个任务时,你会进入一个详细信息页面。
在此页面上,您需要查看任务的实时位置:它正在正确获取API的数据。
这是一张Map,它显示了正确的位置。

在“Laatse Locatie”和按钮之间需要是地址。

<!--Links Beneden-->
    <VerticalStackLayout  Grid.Row="1" Grid.Column="0" HorizontalOptions="CenterAndExpand">
        <Label Text="Live Location" FontAttributes="Bold" FontSize="21" TextDecorations="Underline"/>
        <model:BindableMap x:Name="map" WidthRequest="320" HeightRequest="150" Margin="0,16,0,0" 
                           MapType="Street" IsZoomEnabled="True" IsScrollEnabled="True" HorizontalOptions="Center"
                           ItemsSource="{Binding Positions}" MapSpan="{Binding MapSpanPosition}">
            <model:BindableMap.ItemTemplate>
                <DataTemplate x:DataType="model:MapData">
                    <maps:Pin Label="Fiets Locatie"
                      Address="{Binding LatestAdress}"
                      Type="Place"
                      Location="{Binding Locatie}"/>
                </DataTemplate>
            </model:BindableMap.ItemTemplate>
        </model:BindableMap>
        <Label Margin="0,16,0,0" FontSize="14" LineHeight="1.5" Text="Laatse Locatie:" FontAttributes="Bold" />
        <Label Margin="0,0,0,0" FontSize="12" LineHeight="1.5" 
               HorizontalTextAlignment="Start" LineBreakMode="WordWrap" 
               Text="{Binding Positions[0].LatestAdress}">
        </Label>
        <Button Text="routebeschrijving" Command="{Binding GoToWazeCommand}" />
    </VerticalStackLayout>

上面的代码是我正在使用的代码。如果我正在调试,我删除了Positions[0]. LatestAddress中的0,并写回0。我看到了最新的地址。这很奇怪,因为我在Map上使用了相同的对象。
CODE视图模型:

[RelayCommand]
    async void GetLatestLocation()
    {
        try
        {
            IsBusy = true;
            IsRefreshing = true;

            var data = await _meldingService.GetBikeLocationAsync(SelectedMelding.BurgerInformation.Fietsmodellen[0]);

            if (data != null)
            {
                Positions = new ObservableCollection<MapData>();
                Positions.Add(new MapData()
                {
                    Long = data.lastLng,
                    Lat = data.lastLat,
                    LatestAdress = data.lastAddress,
                    Locatie = new Location(data.lastLat, data.lastLng),
                    TrackerId = data.serial,
                });

                MapSpanPosition = MapSpan.FromCenterAndRadius(Positions[0].Locatie, Distance.FromMeters(150));

            };

            return;
        }
        catch (Exception ex)
        {
            await Application.Current.MainPage.DisplayAlert("Error!", ex.Message, "OK");
        }
        finally
        {
            IsBusy = false;
            IsRefreshing = false;
        }

        //Other wise give error melding
    }

可能知道问题的人?
先谢谢你了

2wnc66cl

2wnc66cl1#

听起来好像Positions[0].LatestAdress在运行时不会更新。
具体来说,我怀疑[0]不会在向集合中添加项时重新求值。
可能是Maui XAML bug。

方法#1

在添加所有元素之后设置Positions

var newPositions = new ObservableCollection();
newPositions.Add(new MapData...);
Positions = newPositions;

方法#2

添加一个新属性,并将其设置为Positions[0]的内容,然后引用该属性:

[ObservableProperty]
private MapData firstPosition;

...
// After adding new position to Positions.
// IMPORTANT: "FirstPosition" is *property* name. Field name "firstPosition" won't fire update.
FirstPosition = Positions[0];
<Label ... Text="{Binding FirstPosition.LatestAdress}" />

相关问题