在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?
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 客户将绑定设置为颜色。以上是关于在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章