【问题标题】:Toggle button with an image in xamarin在 xamarin 中带有图像的切换按钮
【发布时间】:2019-02-03 01:50:52
【问题描述】:

我正在使用 Button as beow 在 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)。我们将非常感谢您在这方面的支持,并感谢您的支持。

【问题讨论】:

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


    【解决方案1】:

    好吧,你所要做的就是创建一个类似这样的转换器:

     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 会回复

    【讨论】:

    • 非常感谢您的支持并非常感谢,我有点困惑如何在 xaml 中声明图像?像这样 或者我如何声明源有图片,请帮忙,谢谢
    • 是的,你会像在评论中那样做,我没有看到你在使用按钮,我认为这是一个图像控件,我很抱歉
    • @Hakim,构建时没有错误,但是当应用程序部署和运行时,它会抛出如下异常“未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。” ,就我而言,他们认为我们绑定到图像作为按钮源的方式有问题,但是当我将其作为文本提供时,它正在运行但没有更改文本,即使我点击了如果您可以发送电子邮件,我也可以向您发送屏幕截图,知道会有什么问题吗??? (非常感谢您的支持,我不介意为您的宝贵时间捐赠)
    • 发邮件给我 hakimgulamali88@gmail.com 等待!!
    • 我刚刚给你发了一封邮件,谢谢,如果你还没有收到我的邮件,请告诉我。
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2015-04-16
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多