在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?

Posted

技术标签:

【中文标题】在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?【英文标题】:How can I change the text color of a label after its respective parent(item of a listview) is tapped? 【发布时间】:2020-06-30 02:03:30 【问题描述】:

我有一个使用 ItemTemplate 的 ListView。我想在点击项目时更改相应的标签文本颜色。

我的代码的相关部分:

public class Especialidade

            public string id  get; set; 
            public string especialidade  get; set; 
            public Color color  get; set; 


public List<Especialidade> ListaEspecs;

我正在手动设置 ListView ItemsSource,而不是使用绑定:

ListViewEspecs.ItemsSource = ListaEspecs;

应该改变颜色的代码(颜色应该自动绑定)

async void ListViewEspecs_ItemTapped(System.Object sender, Xamarin.Forms.ItemTappedEventArgs e)

    var x = e.Item as Especialidade;
    x.color = Color.Orange;

Xaml

<ListView x:Name="ListViewEspecs" ItemTapped="ListViewEspecs_ItemTapped" Grid.Column="0" Grid.Row="1" SelectionMode="None" BackgroundColor="Transparent" SeparatorVisibility="None" HorizontalOptions="FillAndExpand" VerticalOptions="StartAndExpand" VerticalScrollBarVisibility="Never" SeparatorColor="Transparent">
    <ListView.ItemTemplate>
         <DataTemplate>
             <ViewCell>
                <Grid Margin="0,0,0,5"> 
                     <Grid.RowDefinitions>
                          <RowDefinition Height="40" />
                     </Grid.RowDefinitions>

                     <Label Text="Binding especialidade" Grid.Column="1" Grid.Row="0" FontSize="16" HorizontalTextAlignment="Start" HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand" TextColor="Binding color" />
                </Grid> 
             </ViewCell> 
          </DataTemplate> 
      </ListView.ItemTemplate>
</ListView>

标签文本按预期绑定,但是当我点击该项目时,应用程序毫无例外地冻结。我该怎么做?

【问题讨论】:

Especialidade 需要实现 INotifyPropertyChanged @Jason 你能回答这个问题吗?我将它标记为正确的,因为它解决了问题。 【参考方案1】:

同意@Jason需要在模型中实现接口INotifyPropertyChanged

public class Especialidade : INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    

    public string id  get; set; 
    public string especialidade  get; set; 

    Color _color;
    public Color color
    
        get  return _color; 

        set 

             if(_color!=value)
            
                _color = value;
                NotifyPropertyChanged("color");
            

        
    


另外,既然你用过MVVM,最好把所有的逻辑处理都放在ViewModel中。

【讨论】:

@Jason 客户将绑定设置为颜色。

以上是关于在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 GridLayoutManager 中的项目固定为具有不同跨度计数的父项的开始和结束

如何将子列表视图项目包含每个项目的数据

values-v23.xml 错误。检索项目的父项时出错

如何在另一个列表视图中显示其各自组项的子项

AAPT:检索项目的父项时出错:未找到与名称匹配的资源”

SwiftUI:关闭视图导致索引超出范围错误