C# 如何更改listview选定项文本颜色Xamarin.forms
如何更改listview selected/ItemTapped项目文本颜色Xamarin.forms 下面是我的代码C# 如何更改listview选定项文本颜色Xamarin.forms,c#,xaml,xamarin.forms,C#,Xaml,Xamarin.forms,如何更改listview selected/ItemTapped项目文本颜色Xamarin.forms 下面是我的代码 namespace StoreProject.View { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class SelectFilters : ContentPage { public ObservableCollection<Item>
namespace StoreProject.View
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SelectFilters : ContentPage
{
public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>();
public SelectFilters()
{
InitializeComponent();
BindingContext = this;
Items.Add(new Item { Name = "GENDER" });
Items.Add(new Item { Name = "SIZE" });
Items.Add(new Item { Name = "STYLE" });
Items.Add(new Item { Name = "BRAND" });
Items.Add(new Item { Name = "PRICE" });
Items.Add(new Item { Name = "COLOR" });
}
private void lstView_ItemSelected(object sender, ItemTappedEventArgs e)
{
try
{
// string itm = e.SelectedItem.ToString();
var dataItem = e.Item as Item;
dataItem.TextColor = Color.Red;
dataItem.OnPropertyChanged();
// update listView
dataItem.OnPropertyChanged();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
}
public class Item : INotifyPropertyChanged
{
public string Name { get; set; }
public Color TextColor { get; set; } = Color.Black;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged()
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(""));
}
}
}
namespace StoreProject.View
{
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类SelectFilters:ContentPage
{
公共ObservableCollection项{get;set;}=new ObservableCollection();
公共选择过滤器()
{
初始化组件();
BindingContext=这个;
添加(新项目{Name=“GENDER”});
添加(新项{Name=“SIZE”});
添加(新项{Name=“STYLE”});
添加(新项目{Name=“BRAND”});
添加(新项目{Name=“PRICE”});
添加(新项{Name=“COLOR”});
}
private void lstView_ItemSelected(对象发送方,ItemTappedEventArgs e)
{
尝试
{
//字符串itm=e.SelectedItem.ToString();
var dataItem=e.作为项目的项目;
dataItem.TextColor=Color.Red;
dataItem.OnPropertyChanged();
//更新列表视图
dataItem.OnPropertyChanged();
}
捕获(例外情况除外)
{
系统.诊断.调试.写线(ex);
}
}
}
公共类项目:INotifyPropertyChanged
{
公共字符串名称{get;set;}
公共颜色TextColor{get;set;}=Color.Black;
公共事件属性更改事件处理程序属性更改;
公共无效OnPropertyChanged()
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(“”);
}
}
}
您必须为您的列表视图的视图模型创建颜色属性。实施INotifyPropertyChanged
,以便在更改ListView的内容时可以更新ListView
:
public class ItemViewModel : INotifyPropertyChanged
{
...
public string Name { get; set; } = "";
public Color TextColor { get; set; } = Color.Black;
// event handler for updating the list views
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged()
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(""));
}
}
然后将事件侦听器和itemsource
添加到列表视图中:
listView.ItemTapped += Tapped;
var itemsSource = new ObservableCollection<ItemViewModel>{
new ItemViewModel { Name = "aaa" },
new ItemViewModel { Name = "bbb" },
new ItemViewModel { Name = "ccc" },
new ItemViewModel { Name = "ddd" },
new ItemViewModel { Name = "eee" },
new ItemViewModel { Name = "fff" },
};
listView.ItemsSource = itemsSource;
带有绑定的XAML中的列表视图
用于TextColor
字段:
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<AbsoluteLayout>
<Label Text="{Binding Name}"
TextColor="{Binding TextColor}"
AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="0.5, 0.5, 0.9, 0.9"/>
</AbsoluteLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
只需添加
#000000
到您的Resources/values/stles.xml文件 它可以工作,但是如果我选择了第二个项目,那么两个选择的项目都会改变颜色,这意味着在选择第二个项目时颜色不会恢复。嗯,它在我的机器上工作。无论如何,我更新了解决方案以包含示例ItemSource我正在发送代码请看一看,我已发送带有答案的代码,因为注释框长度太短这与Xamarin表单无关。不包含UWP或iOS。
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<AbsoluteLayout>
<Label Text="{Binding Name}"
TextColor="{Binding TextColor}"
AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="0.5, 0.5, 0.9, 0.9"/>
</AbsoluteLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>