maui:当可观察集合中的项目更改其道具之一时,UI 不会更新,除非我离开并重新打开页面

问题描述 投票:0回答:1

我只是想捕获可观察集合中的一个项目并更改其道具之一:

   public void Click(object obj)
   {
        Device.InvokeOnMainThreadAsync(() =>
        {
            if (obj != null)
            {
                var click = obj as WifiSelectionModel;
                if (click == null) return;
                click.IsActive = true;
            }

            OnPropertyChanged(nameof(WifiHotSpots));
        });

我的类继承自:ObservableObject,

如果我单击,用户界面中不会发生任何变化(它应该变成红色)。 但如果我离开页面并返回;这些物品现在都是红色的。所以我的逻辑一定是正确的,只是我在 mvvm 中处理 UI 的方式似乎不对。 有什么帮助吗?

    VM:

public class WifiSelectionModel
{
    public string Name { get; set; } = "";
    public bool IsActive { get; set; } = false;
    public int Id {  get; set; }
}

查看:

<CollectionView  SelectionMode="Single"  VerticalOptions="FillAndExpand" ItemsSource="{Binding WifiHotSpots}">
     <CollectionView.ItemTemplate>
         <DataTemplate x:DataType="Models:WifiSelectionModel">
             <Grid Padding="10">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="50"></RowDefinition>
                     <RowDefinition Height="50"></RowDefinition>
                 </Grid.RowDefinitions>
                 <Grid.GestureRecognizers>
                     <TapGestureRecognizer Command="{Binding BindingContext.ClickCommand, Source={x:Reference WifiPageViewPage}}" CommandParameter="{Binding .}"/>
                 </Grid.GestureRecognizers>
                 <Label Grid.Row="0" Text="{Binding Name}" FontAttributes="Bold" />
                 <StackLayout HeightRequest="50" IsVisible="{Binding IsActive}" BackgroundColor="Red" Grid.Row="1">
                     <Label Text="hi mom"></Label>
                 </StackLayout>
             </Grid>
         </DataTemplate>
     </CollectionView.ItemTemplate>
 </CollectionView>
c# mvvm maui
1个回答
0
投票

来自ObservableObject的文档:

简单属性

以下是如何对自定义属性实现通知支持的示例:

private string name;
public string Name
{
    get => name;
    set => SetProperty(ref name, value);
}

我对 MAUI 不熟悉,但你的

WifiSelectionModel.IsActive.set
似乎缺少任何通知 UI 它已更改的内容,这可能就是更改被忽略的原因。
WifiSelectionModel
也应该继承自 ObservableObject,UI 使用的每个视图模型也应该继承。

有多种不同的模式用于通知 UI 更改,具体取决于使用的框架和库。但需要有一些某些东西,例如引发事件、使用属性上的属性或调用方法。

© www.soinside.com 2019 - 2024. All rights reserved.