列表视图所选项目值已更改未按时反映UI

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

在Xamarin中使用MVVM;我正在使用observable collection在listview中列出我的项目。它工作正常。在我的listview中,我有一个Label,当用户点击所选列表项时,我需要更改Label值。它也工作正常。但问题是,选中列表项标签值仅在我滚动列表视图后才更改。

我需要按时更改所选列表项的标签值。

这是我的代码:Xaml

<ListView x:Name="Listitem"  Grid.Row="2" Grid.ColumnSpan="2" ItemsSource="{Binding States,Mode=TwoWay}" SelectedItem="{Binding YourSelectedItem,Mode=TwoWay}"  VerticalOptions="FillAndExpand" HasUnevenRows="true" CachingStrategy="RecycleElement" BackgroundColor="White" >
    <ListView.Header>                                                    
        <Grid BackgroundColor="{StaticResource Accent}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Label Grid.Column="0" Text="Country Code" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{StaticResource Primary}" />
            <Label Grid.Column="1" Text="Name"  HorizontalOptions="Center" TextColor="{StaticResource Primary}" />
            <Label Grid.Column="2" Text="Capital"  HorizontalOptions="Center" TextColor="{StaticResource Primary}" />
        </Grid>
    </ListView.Header>
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.View>
                    <Grid VerticalOptions="Center">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="3*" />
                            <ColumnDefinition Width="3*" />
                            <ColumnDefinition Width="3*" />
                            <ColumnDefinition Width="1*" />
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0" Text="{Binding abbr}" Margin="5" HorizontalOptions="Center" VerticalOptions="Center" FontSize="18" TextColor="{StaticResource Primary}" />
                        <Label Grid.Column="1" Text="{Binding name}"  Margin="5" HorizontalTextAlignment="Start"  VerticalOptions="Center" FontSize="18" LineBreakMode="WordWrap" TextColor="{StaticResource Primary}"/>
                        <Label Grid.Column="2" Text="{Binding capital}"  Margin="5" HorizontalTextAlignment="Start"  VerticalOptions="Center" FontSize="18" LineBreakMode="WordWrap" TextColor="{StaticResource Primary}"/>
                        <controls:CheckBox Grid.Column="3" Margin="0, 0, 0, 0" CheckedChanged="Handle_CheckedChanged" BindingContext="{Binding .}"  BackgroundColor="Transparent" WidthRequest="40" HeightRequest="30" IsVisible="True" />
                    </Grid>
                </ViewCell.View>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这是我选择列表项的View模型;

public TodoItem YourSelectedItem
{
    get
    {
        return _yourSelectedItem;
    }

    set
    {
        _yourSelectedItem = value;
        _yourSelectedItem.abbr = "Tapped";
        OnPropertyChanged("YourSelectedItem");
    }
}

物品来源属性;

private ObservableCollection<TodoItem> _States;

public ObservableCollection<TodoItem> States
{ 
    get { return _States; }
    set { _States = value; OnPropertyChanged("States"); }  
}
c# xamarin xamarin.forms
1个回答
0
投票

类TodoItem需要实现接口INotifyPropertyChanged,属性abbr需要像blow一样实现:

public string abbr {
        get 
        { 
            return _abbr; 
        }
        set 
        { 
            if (_abbr != value) {
                _abbr = value;
                OnPropertyChanged("abbr");
            }
        } 

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