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>