动态加载时更改listview中的控件背景

时间:2018-06-08 10:24:34

标签: xamarin.forms

我正在为我的项目使用xamarin.forms。我有如下的列表视图:

<ListView x:Name="lst_port" HasUnevenRows="True">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <ViewCell>
                                        <Frame Style="{StaticResource FrmDashboard}" Margin="5">
                                            <StackLayout>
                                                <StackLayout.GestureRecognizers>
                                                    <TapGestureRecognizer Tapped="OnPortering_Tapped"></TapGestureRecognizer>
                                                </StackLayout.GestureRecognizers>
                                                <Grid>
                                                    <Grid.RowDefinitions>
                                                        <RowDefinition Height="*" />
                                                    </Grid.RowDefinitions>
                                                    <Grid.ColumnDefinitions>
                                                        <ColumnDefinition Width="*" />
                                                    </Grid.ColumnDefinitions>
                                                    <Label Grid.Row="0" Grid.Column="0" Style="{StaticResource LISTTitleLabel}" Text="{Binding PorteringNumber}"></Label>
                                                    <Button Grid.Row="0" Grid.Column="0" Style="{StaticResource LISTTitleButton}" Text="{Binding PorteringStatus}" BackgroundColor="#2d964c"></Button>
                                                </Grid>
                                                <StackLayout Orientation="Horizontal">
                                                    <Image Style="{StaticResource LISTImageIcon}" Source="note.png"/>
                                                    <Label Style="{StaticResource LISTBodyLabel}" Text="{Binding PorteringAssetNumber}"></Label>
                                                </StackLayout>
                                                <StackLayout Orientation="Horizontal">
                                                    <Image Style="{StaticResource LISTImageIcon}" Source="clock.png"/>
                                                    <Label Style="{StaticResource LISTBodyLabel1}" Text="{Binding PorteringDate}"></Label>
                                                    <Image Style="{StaticResource LISTImageIcon}" Source="calender.png"/>
                                                    <Label Style="{StaticResource LISTBodyLabel1}" Text="{Binding PorteringTime}"></Label>
                                                </StackLayout>
                                            </StackLayout>
                                        </Frame>
                                    </ViewCell>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>

我使用数据表后面的代码将值分配给listview。 结果如下图所示: enter image description here

现在我想更改按钮的背景颜色,当绑定文本是&#34;紧急&#34;。

2 个答案:

答案 0 :(得分:0)

选项很少:

  1. 决定ViewModel中代表ListView.Item的按钮颜色 - 可以通过在ViewModel中引入其他属性来完成。
  2. 您可以创建IValueConverter - 根据输入返回按钮颜色。
  3. 例如:input == "Normal" ? Color.Green : Color.Red

    在这两种情况下,您都必须将所选解决方案绑定到Button.BackgroundColor中的ListView属性。

答案 1 :(得分:0)

您可以使用触发器来实现此目的。

请尝试以下代码。

<Button Grid.Row="0" Grid.Column="0" Style="{StaticResource LISTTitleButton}" Text="{Binding PorteringStatus}" BackgroundColor="#2d964c">
    <Button.Triggers>
        <DataTrigger TargetType="Label" Binding="{Binding PorteringStatus}" Value="Emergency">
            <Setter Property="BackgroundColor" Value="Red" />
        </DataTrigger>
    </Button.Triggers>
</Button>