Xamarin表单:如何更改flowlistview中所选项目的背景色?

Xamarin表单:如何更改flowlistview中所选项目的背景色?,listview,xamarin.forms,background-color,Listview,Xamarin.forms,Background Color,我正在使用flowlistview在UI中显示项目。当点击流列表视图中的某个项目时,我需要更改背景色或高亮显示所选项目。我尝试了FlowTappedBackgroundColor和FlowRowBackgroundColor流列表视图的属性。但它并没有像预期的那样发挥作用。我经历了这些,但这只适用于普通的listview。如何实现此功能?如果检查FlowViewCell的源代码,您会发现FlowViewCell的超类不是ViewCell,而是ContentView。因此,如果你关注博客,它将不起

我正在使用
flowlistview
在UI中显示项目。当点击
流列表视图中的某个项目时,我需要更改背景色或高亮显示所选项目。我尝试了
FlowTappedBackgroundColor
FlowRowBackgroundColor
流列表视图的属性。但它并没有像预期的那样发挥作用。我经历了这些,但这只适用于普通的listview。如何实现此功能?

如果检查FlowViewCell的源代码,您会发现FlowViewCell的超类不是ViewCell,而是ContentView。因此,如果你关注博客,它将不起作用

namespace DLToolkit.Forms.Controls
{
    //
    // Summary:
    //     FlowListView content view cell.
    [Preserve(AllMembers = true)]
    public class FlowViewCell : ContentView, IFlowViewCell
    {
        //
        // Summary:
        //     Initializes a new instance of the DLToolkit.Forms.Controls.FlowViewCell class.
        public FlowViewCell();

        //
        // Summary:
        //     Raised when cell is tapped.
        public virtual void OnTapped();
    }
}
在FlowListView.FlowColumnTemplate中的控件后台创建绑定,在FlowItemTappedCommand中进行更改

代码隐藏
公共类模型:INotifyPropertyChanged
{
公共字符串标题
{
获得;设置;
}
私人色彩;
公共颜色
{
集合{
if(值!=null)
{
bgColor=值;
NotifyPropertyChanged();
}
}
得到
{
返回颜色;
}
}
公共事件属性更改事件处理程序属性更改;
私有void NotifyPropertyChanged([CallerMemberName]字符串propertyName=”“)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
公共类视图模型
{
公共可观察集合列表{set;get;}
public ICommand ItemTappedCommand{get;set;}
公共视图模型()
{
列表=新的ObservableCollection();
添加(新模型(){Title=“1”,BGColor=Color.White});
添加(新模型(){Title=“2”,BGColor=Color.White});
添加(新模型(){Title=“3”,BGColor=Color.White});
添加(新模型(){Title=“4”,BGColor=Color.White});
ItemTappedCommand=新命令((obj)=>{
//重置背景颜色
foreach(列表中的var模型)
{
model.BGColor=Color.White;
}
模型mo=obj作为模型;
int index=List.IndexOf(mo);
mo.BGColor=Color.Red;
});
}
} 
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类第1页:内容页
{
公共页1()
{
初始化组件();
ViewModel vm=新的ViewModel();
BindingContext=vm;
}
}
在xaml中


此外,XF 4.3之后还提供了收集视图。您可以使用它而不是第三方库。选中。

如果我选择了多个项目,则所有项目都有红色背景色。我只需要最后一个选定项目的背景色。请在我的线程上更新collectionview答案,它现在在ios中工作正常。问题的原因是什么?对于当前线程:添加了所有代码,但在错误列表中出现了2个错误。请确保所有版本的nuget package和XF都是最新的。
public class Model : INotifyPropertyChanged 
 {
    public string Title
    {
        get;set;
    }


    private Color bgColor;
    public Color BGColor
    {
        set { 
        if(value != null)
            {
                bgColor = value;
                NotifyPropertyChanged();
            }
        }
        get
        {
            return bgColor;
        }
    }

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

}

public class ViewModel
{
    public ObservableCollection<Model> List { set; get; }

    public ICommand ItemTappedCommand { get; set; }


   public ViewModel()
    {
        List = new ObservableCollection<Model>();
        List.Add(new Model() { Title = "1" ,BGColor = Color.White });
        List.Add(new Model() { Title = "2" , BGColor = Color.White });
        List.Add(new Model() { Title = "3", BGColor = Color.White });
        List.Add(new Model() { Title = "4", BGColor = Color.White });

        ItemTappedCommand = new Command((obj)=> {

            //reset the bg color 
            foreach(var model in List)
            {
                model.BGColor = Color.White;
            }

            Model mo = obj as Model;
            int index = List.IndexOf(mo);           
            mo.BGColor = Color.Red;

        });
    }
} 

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Page1 : ContentPage
{
    public Page1()
    {
        InitializeComponent();

        ViewModel vm = new ViewModel();
        BindingContext = vm;
    }
}
<flv:FlowListView FlowColumnCount="3" 
                  SeparatorVisibility="None" HasUnevenRows="false"
                  FlowItemTappedCommand="{Binding ItemTappedCommand}"
                  FlowItemsSource="{Binding List}"   >

    <flv:FlowListView.FlowColumnTemplate>
        <DataTemplate> 
            <Label HorizontalOptions="Fill"
                   BackgroundColor="{Binding BGColor}"
                   VerticalOptions="Fill" 
                   XAlign="Center" 
                   YAlign="Center" 
                   Text="{Binding Title}"/>
        </DataTemplate>
    </flv:FlowListView.FlowColumnTemplate>

</flv:FlowListView>