在xamarin中切换带有图像的按钮

时间:2018-08-28 12:17:43

标签: visual-studio xaml xamarin xamarin.forms xamarin.android

我正在使用Button作为bew在xaml视图中显示带有图像的“添加到购物车”按钮

<Button x:Name="cartbutton" Grid.Row="0" Command="{Binding Source={x:Reference ListItemPage}, Path=BindingContext.CartCommand}" CommandParameter="{Binding .}" HorizontalOptions="End" VerticalOptions="Start" Image="lowim.png" BackgroundColor="Transparent" Margin="0,5,5,0" />

并在MVVM中使用,如下所示

CartCommand = new Command<Resturent>(OnCartCommand);

然后我将MVVM与依赖项注入结合使用,其中我只能在视图模型中获得按钮单击的Icommand,如下所示

public ICommand CartCommand { get; set; }

public async void OnCartCommand(Resturent restoraunt)
{
  await DialogService.DisplayAlert("CART DETAILS", "ITEM"+ restoraunt.Name+ "SUCESSFULLY ADDED", "OK");
}

我希望创建一个切换按钮,当我单击按钮时(用户可以通过按下带有图像lowim.png的按钮将商品添加到购物车中,如上所示),然后按钮的图像应该改变(加上另一个图片图标,可以说add.jpg)。在这方面的支持将受到高度赞赏,并感谢您的支持。

1 个答案:

答案 0 :(得分:0)

好吧,您要做的就是创建一个像这样的转换器:

 public class ConverterAddRemoveImage : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool isAddedToCart = (bool)value;
        if (isAddedToCart)
        {
            return "PositiveImage"; //This will be a string
        }
        else
        {
            return "NegativeImage";  //This will be a string
        }
    }

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

然后,您需要在XAML页面的XAML资源字典中定义它,如下所示:

<ContentPage.Resources>
<ResourceDictionary>
        <common:ConverterAddRemoveImage x:Key="AddRemoveImage" />
</ResourceDictionary>
</ContentPage.Resources>

常见的是转换器所在的名称空间。

图片来源可能是这样的:

Source="{Binding IsAddedToCart, Converter={StaticResource AddRemoveImage}}

添加到购物车的位置是模型中的bool属性,如下所示:

  private bool isInCart;
  public event PropertyChangedEventHandler PropertyChanged;
  public bool IsAddedToCart
    {
        get
        {
            return isInCart;
        }
        set
        {
            isInCart= value;
            NotifyPropertyChanged(nameof(IsAddedToCart));
        }
    }
 private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

注意:您的模型类必须继承自INotifyPropertyChanged界面

现在,一旦您更改模型的bool属性,它将相应地更改图像。

如有任何查询,Goodluck还原