Как изменить содержимое кнопки GridView при нажатии? - PullRequest
0 голосов
/ 10 апреля 2019

В моем приложении есть опция, в которой пользователь может добавить элемент в свой список избранного.

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

Я пробовал этот метод, но он не работает, потому что кнопка является элементом GridView.

private void OrdersButton_Click(object sender, EventArgs e)
{
    if (OrdersButton.Text == "Turn Orders On")
    {
        OrdersButton.Text = "Turn Orders Off";
    }
    else if (OrdersButton.Text == "Turn Orders Off")
    {
        OrdersButton.Text = "Turn Orders On";
    }
}

[Ответ из этого поста - Изменить текст кнопки послещелкните, затем измените его обратно после повторного нажатия ]

Вот мой код кнопки -

<Button Style="{StaticResource TextBlockButtonStyle}"
        Margin="2,0"
        Content="&#xEB51;" 
        FontFamily="Segoe MDL2 Assets"
        x:Name="addToFevBtn"
        Click="AddToFevBtn_Click"/>

Итак, мой вопрос, как я могу это сделать?

1 Ответ

1 голос
/ 11 апреля 2019

По вашему требованию, лучший способ - это свойство Foreground кнопки привязки со значением Boolean, затем использовать IValueConverter для преобразования его в SolidColorBrush.Вы можете изменить цвет символа, изменив значение IsFav в методе нажатия кнопки.

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }
    public List<Item> Items { get; set; }
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        Items = new List<Item>();
        Items.Add(new Item { Name = "Nice Day", IsFav = true });
        Items.Add(new Item { Name = "Nice Day", IsFav = false });
        Items.Add(new Item { Name = "Nice Day", IsFav = false });
    }

    private void AddToFevBtn_Click(object sender, RoutedEventArgs e)
    {
        var btn = sender as Button;
        var item = btn.DataContext as Item;
        item.IsFav = !item.IsFav;
    }
}
public class Item : INotifyPropertyChanged
{
    public bool IsFav
    {
        get
        {
            return isFav;

        }
        set
        {
            isFav = value;
            OnPropertyChanged();
        }
    }
    private bool isFav;

    public string Name { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        // Raise the PropertyChanged event, passing the name of the property whose value has changed.
        if (PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

    }
}

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (Boolean.Parse(value.ToString()))
        {
            return new SolidColorBrush(Colors.Red);
        }
        else
        {
            return new SolidColorBrush(Colors.Black);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Xaml

<Page.Resources>
    <local:ColorConverter x:Key="Converter"/>
</Page.Resources>
<Grid>
    <GridView ItemsSource="{x:Bind Items}">
        <GridView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical" Width="100" >
                    <TextBlock Text="{Binding Name}"
                              TextAlignment="Center" 
                              HorizontalAlignment="Center" 
                              Margin="0,10,0,0"/>
                    <Button Style="{StaticResource TextBlockButtonStyle}" 
                    HorizontalAlignment="Center"
                    Margin="0,30,0,0"
                    Content="&#xEB51;" 
                    FontSize="25"
                    FontFamily="Segoe MDL2 Assets"     
                    Foreground="{Binding IsFav,Converter={StaticResource Converter}}"
                           Click="AddToFevBtn_Click"
                    x:Name="addToFevBtn"
                  />
                </StackPanel>

            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</Grid>
...