【问题标题】:Change ListView Item Background Color based on the value of the Item C# Xamarin.Forms根据项目 C# Xamarin.Forms 的值更改 ListView 项目背景颜色
【发布时间】:2023-03-18 05:41:01
【问题描述】:

我尝试在 Internet 上查找类似的问题,但似乎没有什么和我的一样。

我有一个显示记录列表的 ListView:

    <ListView x:Name="TavoloListView" HasUnevenRows="true" Grid.Row="2" SeparatorColor="Black"  
     SelectedItem="{Binding SelectedTavoloItem, Mode=TwoWay}" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid  ColumnSpacing="0" RowSpacing="0">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />

                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <BoxView x:Name="ItemsBackground" Grid.Column="0" Grid.ColumnSpan="6" Color="White" Opacity="0.5"/>
                        <Label Text="{Binding TavoloNo}" Grid.Row="0" Grid.Column="0" TextColor="Black" HorizontalOptions="Center"/>
                        <Label Text="{Binding CameraNo}" Grid.Row="0" Grid.Column="1" TextColor="Black" HorizontalOptions="Center"/>
                        <Label Text="{Binding Arrivo, StringFormat='\{0:dd/MM/yy}'}" Grid.Row="0" Grid.Column="2" TextColor="Black" HorizontalOptions="Center"/>
                        <Label Text="{Binding Partenza, StringFormat='\{0:dd/MM/yy}'}" Grid.Row="0" Grid.Column="3" TextColor="Black" HorizontalOptions="Center"/>
                        <Label Text="{Binding PersoneTot}" Grid.Row="0" Grid.Column="4" TextColor="Black" HorizontalOptions="Center"/>
                        <Label Text="{Binding Bambini, StringFormat='(\{0}\)'}" Grid.Row="0" Grid.Column="5" TextColor="Black" HorizontalOptions="Center"/>
                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

我需要根据两个Labels ArrivoPartenza 的比较结果来更改ItemsBackground BoxView 的颜色。 基本上,在页面上有名为MainDatePickerDatePicker。 我想将记录的ArrivoPartenza 日期值与MainDatePicker.Date 进行比较。如果Arrivo == MainDatePicker.Date 我想将ItemsBackground BoxView 的颜色更改为绿色。如果PartenzaMainDatePicker.Date 匹配,则ItemsBackground BoxView 的颜色应为红色。

如果以上都不成立,则颜色保持白色。

有可能实现吗?

【问题讨论】:

    标签: c# listview xamarin.forms binding conditional-formatting


    【解决方案1】:

    你可以像这样在侧面设置 listViewBox 颜色 `

    <ListView Grid.Row="1" ItemsSource="{Binding BindListViewData}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <ViewCell.View>
                                    <BoxView>
                                        <BoxView.Triggers>
                                            <DataTrigger TargetType="BoxView" Binding="{Binding BindBoolValueFromModel}" Value="True">
                                                <Setter Property="BackgroundColor" Value="Green" />
                                            </DataTrigger>
                                            <DataTrigger TargetType="BoxView" Binding="{Binding BindBoolValueFromModel}" Value="False">
                                                <Setter Property="BackgroundColor" Value="Red" />
                                            </DataTrigger>
                                        </BoxView.Triggers>
                                    </BoxView>
                                </ViewCell.View>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                    </ListView>
    

    `

    【讨论】:

      【解决方案2】:

      在您的 SelectedTavoloItem 中添加新属性,例如命名为 color,当您为 TavoloListView 初始化数据源时,只需验证您的条件

      public void UpdateDataSourceForLIst()
      {
      
      List<SelectedTavoloItem> newListData=new List<SelectedTavoloItem>();
      foreach(var item in DataSourceForList)
      {
          if(Arrivo == MainDatePicker.Date)
          {
            item.color=green;
            newListData.Add(item);
          }else{
            item.color=red;
            newListData.Add(item);
          }
      
       }
      DataSourceForList=newListData;
      }
      

      当您绑定列表时,将此代码添加到您的背景框中:

      `<BoxView 
         x:Name="ItemsBackground" 
         Grid.Column="0" 
         Grid.ColumnSpan="6" 
         Color="{Binding color}" ////  bind new created property 
         Opacity="0.5"/>`
      

      【讨论】:

      • 为什么使用“selected”?它会适用于整个列表吗? (颜色必须在整个列表中验证,而不是仅在选定的项目上)
      • 好吧,我通过检查您的条件来更新整个列表,然后根据它为每个元素分配必须具有它的颜色
      • 我举个例子的方法必须在 TavoloListView.ItemsSource = DataSourceForList; 之前执行;
      • 是的。听起来不错。同时我带来的是创建我的 Tavolo 记录列表,创建 Tavolo2(带颜色)类型的新列表,将原始参数添加到新对象,根据结果添加最后一个颜色参数,将对象添加到新列表和将 listviee 绑定到新列表。
      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2011-01-14
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多