C# 如何更改listview选定项文本颜色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>

如何更改listview selected/ItemTapped项目文本颜色Xamarin.forms

下面是我的代码

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>