Как динамически изменить цвет этикетки? Xamarin - PullRequest
0 голосов
/ 27 апреля 2019

Я получил этот код ниже, но я не могу понять, как заставить выбранную метку превратиться в синий цвет фона и белый текст вместо того, что он имеет в невыбранном режиме.Одновременно может быть выбрано только 1 путешествие, а выбранное необходимо изменить.Я подумал, что могу использовать датгергеры или поведения.Я могу понять, как изменить кнопку в команде, но как бы я изменил другие кнопки?что выбирается серым?

<CollectionView Grid.Row="1" Grid.Column="0" ItemsSource="{Binding JourneyItems}" SelectionMode="Single"  ItemsLayout="{x:Static ListItemsLayout.HorizontalList}">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <StackLayout Orientation="Horizontal" >
                <StackLayout Margin="10,0,10,0" BackgroundColor="LightGray"  VerticalOptions="Fill"  Orientation="Horizontal" >
                    <Label Text="{Binding Name}"  TextColor="{StaticResource ThemeBkColor}" VerticalTextAlignment="Center" VerticalOptions="Center" />
                </StackLayout>

                <StackLayout.GestureRecognizers>
                    <TapGestureRecognizer Command="{Binding Path=ViewModel.SwitchJourneyCommand, Source={x:Reference ThisJourneysPage}}"
                        CommandParameter = "{Binding .}" NumberOfTapsRequired="1"/>
                </StackLayout.GestureRecognizers>
            </StackLayout>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

1 Ответ

2 голосов
/ 27 апреля 2019

Вам просто нужно добавить свойство Selected к вашей модели JourneyItems, а затем даже BackgroundColor.

public class JourneyItem {
    // more stuff

    public bool Selected { get; set; }

    public Color BackgroundColor => Selected ? Color.Blue : Color.Gray;

    public Color TextColor => Selected ? Color.White : Color.Black;
}

Затем связать BackgroundColor и TextColor, чтобы изменить цвет X, когдаSelected равно true и цвет Y в противном случае.

<Label Text="{Binding Name}"  TextColor="{Binding TextColor}"  BackgroundColor="{Binding BackgroundColor}"/>

Наконец, в ViewModel.SwitchJourneyCommand установите для выбранной модели значение true, а для всех остальных моделей - false.

public void OnJourneyCommand(JourneyItem selectedItem) {
    foreach(JourneyItem item in JourneyItems) {
        item.Selected = item.Id == selectedItem.Id;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...