在CollectionView中无法单击按钮

如何解决在CollectionView中无法单击按钮

我有一个CollectionView和我的自定义按钮。我想用按钮制作一个网格。当我点击按钮时,它会改变背景色。我想在void OnCollectionViewSelectionChanged(object sender,SelectionChangedEventArgs e)中写一些东西,并且标签的文本是SELECTED按钮的Name(class field)当我在collectionview中单击按钮时,它会更改颜色,但是按钮不可单击,它看不到,如果我写图像可以读取数据。请帮助我使按钮可单击

<StackLayout>
                <Label  x:Name="meow1"></Label>
                <CollectionView  ItemsSource="{Binding Cars}" x:Name="phonesList" 
                         HeightRequest="90"
                         ItemsLayout="HorizontalList"
                        
                         BackgroundColor="Transparent"
                         SelectionMode="Single"
                         SelectionChanged="OnCollectionViewSelectionChanged">

                    <CollectionView.ItemTemplate>
                        <DataTemplate>
                        <Frame x:Name="frame" CornerRadius="10"  BackgroundColor="Black" Padding="0"    HeightRequest="90"
                       WidthRequest="95">
                                <Grid Padding="0" x:Name="meow">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <RowDefinition Height="Auto" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>
                                <controls:CustomButton TintColor="#725762" HeightRequest="90"
                                                         WidthRequest="90" CornerRadius="10" HorizontalOptions="Center" 
                                                         BackgroundColor="White" ImageSource="{Binding ImagePath}" Clicked="Button_OnClicked"/>
                            </Grid>
                            </Frame>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>

            </StackLayout>

     void OnCollectionViewSelectionChanged(object sender,SelectionChangedEventArgs e)
            {
               meow1.Text = (e.CurrentSelection.FirstOrDefault() as Car).NameImage;
        

}

解决方法

尽管对问题的了解不是很多,但是对于getBalance1.consent.type_ := type1; getBalance1.consent.target := Edit5.Text; getBalance1.consent.id := Edit6.Text; 中的Button单击事件有一些建议。绑定模型时,我们将使用Command and CommandParameter of Button。这就是 MVVM 的设计思想。

例如, Xaml 代码的修改如下:

CollectionView

然后需要修改 Car 模型,添加<StackLayout> <Label x:Name="meow1" Text="{Binding SelectedCarItem.NameImage}" FontSize="Large" VerticalOptions="Start" HorizontalOptions="CenterAndExpand" /> <CollectionView ItemsSource="{Binding Cars}" x:Name="phonesList" HeightRequest="90" ItemsLayout="HorizontalList" BackgroundColor="Transparent" SelectionMode="Single" SelectedItem="{Binding SelectedCarItem}"> <CollectionView.ItemTemplate> <DataTemplate> <Frame x:Name="frame" CornerRadius="10" BackgroundColor="{Binding BgFrameColor}" Padding="0" HeightRequest="90" WidthRequest="95"> <Grid Padding="0" x:Name="meow"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Button HeightRequest="90" WidthRequest="90" CornerRadius="10" HorizontalOptions="Center" BackgroundColor="{Binding BgButtonColor}" ImageSource="{Binding ImagePath}" Command="{Binding TapCommand}" CommandParameter="{Binding Source={x:Reference frame},Path=BindingContext}" /> </Grid> </Frame> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </StackLayout> BgColorIsSelected属性:

TapCommand

添加 CarModel 类以加载数据:

public class Car : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    public string NameImage { get; set; } 
    public string ImagePath { get; set; }

    private Color bgFrameColor;

    public Color BgFrameColor
    {
        set
        {
            if (bgFrameColor != value)
            {
                bgFrameColor = value;
                OnPropertyChanged("BgFrameColor");
            }
        }
        get
        {
            return bgFrameColor;
        }
    }

    private Color bgButtonColor;

    public Color BgButtonColor
    {
        set
        {
            if (bgButtonColor != value)
            {
                bgButtonColor = value;
                OnPropertyChanged("BgButtonColor");
            }
        }
        get
        {
            return bgButtonColor;
        }
    }

    private bool isSelected;

    public bool IsSelected
    {
        set
        {
            if (isSelected != value)
            {
                isSelected = value;
                OnPropertyChanged("IsSelected");
            }
        }
        get
        {
            return isSelected;
        }
    }

    public ICommand TapCommand
    {
        get
        {
            return new Command((e) =>
            {
                var item = (e as Car);
                // logic on item
                if (item.isSelected)
                {
                    item.isSelected = false;
                    item.BgButtonColor = Color.White;
                    item.BgFrameColor = Color.Black;
                    PageCollectionView.SelectedCar.Remove(item);
                    MessagingCenter.Send<object,Car>(this,"Hi",new Car() {NameImage ="Welcome to the car home!" });
                }
                else
                {
                    item.isSelected = true;
                    item.BgButtonColor = Color.Blue;
                    item.BgFrameColor = Color.Yellow;
                    if (PageCollectionView.SelectedCar.Count == 0)
                    {
                        PageCollectionView.SelectedCar.Add(item);
                    }
                    else
                    {
                        PageCollectionView.SelectedCar[0].isSelected = false;
                        PageCollectionView.SelectedCar[0].BgButtonColor = Color.White;
                        PageCollectionView.SelectedCar[0].BgFrameColor = Color.Black;
                        PageCollectionView.SelectedCar.Remove(PageCollectionView.SelectedCar[0]);
                        PageCollectionView.SelectedCar.Add(item);
                    }
                    MessagingCenter.Send<object,item);
                }

            });
        }
    }

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
    }
}

现在在 ContentPage 中,声明一个public class CarModel: INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public List<Car> Cars { get; set; } //public static Car SelectedCarItem { set; get; } public CarModel() { Cars = new List<Car>(); Cars.Add(new Car() { NameImage = "Lexus",ImagePath = "Lexus.png",BgButtonColor = Color.White,BgFrameColor = Color.Black,IsSelected = false }); ; Cars.Add(new Car { NameImage = "Audi",ImagePath = "Audi.png",IsSelected = false }); // set default text of label selectedCarItem = new Car() { NameImage = "Welcome to the car home!" }; } private Car selectedCarItem; public Car SelectedCarItem { get { return selectedCarItem; } set { if (selectedCarItem != value) { selectedCarItem = value; OnPropertyChanged("SelectedCarItem"); } } } protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName)); } } 仅存储一项,以保持选中此收藏夹视图。并使用 MessagingCenter 在此处更新List<Car>

carModel.SelectedCarItem

效果如下:

enter image description here

注意:从示例中,您将看到使用绑定修改public partial class PageCollectionView : ContentPage { public static List<Car> SelectedCar { get; set; } public PageCollectionView() { InitializeComponent(); CarModel carModel = new CarModel(); BindingContext = carModel; SelectedCar = new List<Car>(); MessagingCenter.Subscribe<object,(sender,arg) => { // Do something whenever the "Hi" message is received carModel.SelectedCarItem = arg; }); } } 和模型数据。因此,不建议使用BackgroundColor来修改OnCollectionViewSelectionChanged的文本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-