Как вызвать функцию с параметрами из команды - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь вызвать команду, которую можно связать с помощью Tapgesture ... Почему TabTappedCommand ничего не делает ...

IrrigNetPage.xaml

        <StackLayout BackgroundColor="{Binding SelectedTabColor}"
                     x:Name="StackService">
            <StackLayout.GestureRecognizers>
                <TapGestureRecognizer Command="{Binding TabTappedCommand}" CommandParameter="service"/>
            </StackLayout.GestureRecognizers>
            <Image Source="{Binding ServiceTabIcon}"
                   HorizontalOptions="Start"
                   VerticalOptions="Center" 
                   WidthRequest="16"
                   HeightRequest="16"
                   Aspect="AspectFit"                       
                   x:Name="ServiceIcon"/>
            <Label Text="{i18n:Translate Service}"
               VerticalOptions="FillAndExpand" 
               HorizontalOptions="FillAndExpand"
               VerticalTextAlignment="Center"
               HorizontalTextAlignment="Start"
               TextColor="{Binding SelectedTabTextColor}"
               x:Name="ServiceText"/>
        </StackLayout>

IrrigNetViewModel.cs

public string ServiceTabIcon { get; set; } = "services_sel.png";
public string LocationTabIcon { get; set; } = "location.png";
public string MapTabIcon { get; set; } = "location.png";
public string ListHederIcon { get; set; } = "service_irrig.png";

public ICommand TabTappedCommand { get; }

 public IrrigNetViewModel()
 {
     TabTappedCommand = new Command((tabName) => OnTapClicked(tabName.ToString()));
 }

    private void OnTapClicked(string tabName)
    {
        string serviceBlackIcon = "services.png";
        string locationWhiteIcon = "location_sel.png";
        string mapWhiteIcon = "location_sel.png";

        if (tabName == "service")
        {
            ServiceTabIcon = "services_sel.png";
            LocationTabIcon = "location.png";
            MapTabIcon = "location.png";
        }

        else if (tabName == "location")
        {
            ServiceTabIcon = "services.png";
            LocationTabIcon = "location_sel.png";
            MapTabIcon = "location.png";
        }
        else
        {
            ServiceTabIcon = "services.png";
            LocationTabIcon = "location.png";
            MapTabIcon = "location_sel.png";
        }
    }

Итак, смысл состоит в том, чтобы изменить значки выбранного stackLayout (и вернуться к значкам по умолчанию, когда он не выбран), но по какой-то причине TabTappedCommand не работает ... Чего мне не хватает ...

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Решение:

См. Следующий код

public class IrrigNetViewModel  : INotifyPropertyChanged
{


    public event PropertyChangedEventHandler PropertyChanged;
    private string serviceTabIcon = "services.png"; 
    public string ServiceTabIcon
    {
        get { return serviceTabIcon; }
        set
        {
            serviceTabIcon = value;
            PropertyChanged(this, new PropertyChangedEventArgs("ServiceTabIcon"));
        }
    }

    private string locationTabIcon = "services.png";
    public string LocationTabIcon
    {
        get { return locationTabIcon; }
        set
        {
            locationTabIcon = value;
            PropertyChanged(this, new PropertyChangedEventArgs("LocationTabIcon"));
        }
    }

    private string mapTabIcon = "location.png";
    public string MapTabIcon
    {
        get { return mapTabIcon; }
        set
        {
            mapTabIcon = value;
            PropertyChanged(this, new PropertyChangedEventArgs("MapTabIcon"));
        }
    }

    private string listHederIcon = "services.png";
    public string ListHederIcon
    {
        get { return listHederIcon; }
        set
        {
            listHederIcon = value;
            PropertyChanged(this, new PropertyChangedEventArgs("ListHederIcon"));
        }
    }




    public ICommand TabTappedCommand { get; }

    public IrrigNetViewModel()
    {
        TabTappedCommand = new Command((tabName) => OnTapClicked(tabName.ToString()));



    }

    private void OnTapClicked(string tabName)
    {

        if (tabName == "service")
        {
            ServiceTabIcon = "location.png";
            LocationTabIcon = "location.png";
            MapTabIcon = "location.png";
        }

        else if (tabName == "location")
        {
            ServiceTabIcon = "services.png";
            LocationTabIcon = "location_sel.png";
            MapTabIcon = "location.png";
        }
        else
        {
            ServiceTabIcon = "services.png";
            LocationTabIcon = "location.png";
            MapTabIcon = "location_sel.png";
        }
    }
}
0 голосов
/ 19 апреля 2019

Вам не хватает универсального типа для команды , необходимой для передачи параметра.

public ICommand TabTappedCommand<string> { get; }

public IrrigNetViewModel()
{
   TabTappedCommand = new Command<string>(OnTapClicked);
}
...