Как показать / скрыть кнопку внутри списка - PullRequest
0 голосов
/ 21 сентября 2018

Мой список просмотра заполнен данными, поступающими из API, но внутри моего списка есть метка «statusDescr», где отображаются два состояния (оплачено / отменено), когда состояние на метке оплачено, появляется кнопка и когда онане отображается.

Я уже поместил свойство IsVisible на кнопку, но у меня все еще много проблем

<ListView x:Name="lstView" SeparatorColor="#1C97D5" SeparatorVisibility="Default" HasUnevenRows="True" VerticalOptions="FillAndExpand">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell StyleId="disclosure">
                            <StackLayout>
                                <StackLayout Orientation="Horizontal" >
                                    <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
                                        <StackLayout>
                                            <Label Text="{Binding entityName}" TextColor="White" Font="14"/>
                                            <Label Text="{Binding cmPaymentDate}" TextColor="White" Font="14"/>
                                            <!--the label below is where the states will appear-->
                                            <Label x:Name="lblestado" Text="{Binding statusDescr}" TextColor="White" Font="14"/>
                                        </StackLayout>
                                        <StackLayout HorizontalOptions="EndAndExpand">
                                            <!--This is the button that should be true / false-->
                                            <Button  Text="Abrir" IsVisible="{Binding IsVisible}"  BackgroundColor="#1C97D5" TextColor="White"></Button>
                                            <Label Text="{Binding paymentAmount}" TextColor="White" Font="14" HorizontalOptions="End" />
                                        </StackLayout>
                                    </StackLayout>
                                </StackLayout>
                            </StackLayout>
                       </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

код

try
            {

                string url = "payment/searchByDates/" + min + "/" + max + "/" + App.Nif + "/" + App.accountId;
                Service<Response<Payment>> servico = new Service<Response<Payment>>(url);

                var x = servico.GetByID(null).Result;

                if (x.GetType() == (typeof(Response<Payment>)))
                {
                    var pay = (Response<Payment>)x;

                        lstView.ItemsSource = pay.result;
                        UserDialogs.Instance.HideLoading();

                    //if (statusDescr == "Pago")
                    //{
                    //    lstView.ItemsSource = pay.result;
                    //    UserDialogs.Instance.HideLoading();
                    //    IsVisible = true;
                    //}
                    //else
                    //{
                    //    if (statusDescr == "Cancelado")
                    //    {
                    //        lstView.ItemsSource = pay.result;
                    //        UserDialogs.Instance.HideLoading();
                    //        IsVisible = false;
                    //    }
                    }
                }
                else
                {
                    DisplayAlert("Não encontrado", "Não foi encontrado os dados solicitados", "OK");
                }
            }
            catch (Exception ex)
            {
            DisplayAlert("Erro", ex.Message, "OK");
            UserDialogs.Instance.HideLoading();
        }

модель

public class Payment
    {
        public string cmPaymentDate { get; set; }
        public string entityName { get; set; }
        public string statusDescr { get; set; }
        public string paymentNumber { get; set; }
        public float paymentAmount { get; set; }
        public bool IsVisible { get; set; }
    }
}

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Используйте DataTrigger для Buttom, чтобы сделать Visible или InVisible. Используйте код ниже

<ListView x:Name="lstView" SeparatorVisibility="Default" HasUnevenRows="True" VerticalOptions="FillAndExpand">
<ListView.ItemTemplate>
    <DataTemplate>
        <ViewCell StyleId="disclosure">
            <StackLayout>
                <StackLayout Orientation="Horizontal" >
                    <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
                        <StackLayout>
                            <Label Text="{Binding entityName}" TextColor="White" Font="14"/>
                            <Label Text="{Binding cmPaymentDate}" TextColor="White" Font="14"/>
                            <Label x:Name="lblestado" Text="{Binding statusDescr}" TextColor="White" Font="14"/>
                        </StackLayout>
                        <StackLayout HorizontalOptions="EndAndExpand">
                            <Button  Text="Abrir" BackgroundColor="#1C97D5" TextColor="White">
                                <Button.Triggers>
                                    <DataTrigger TargetType="Button"  Binding="{Binding statusDescr" Value="canceled">
                                        <Setter Property="IsVisible" Value="False"/>
                                    </DataTrigger>
                                    <DataTrigger TargetType="Button"  Binding="{Binding statusDescr" Value="paid">
                                        <Setter Property="IsVisible" Value="True"/>
                                    </DataTrigger>
                                </Button.Triggers>
                            </Button>
                            <Label Text="{Binding paymentAmount}" TextColor="White" Font="14" HorizontalOptions="End" />
                        </StackLayout>
                    </StackLayout>
                </StackLayout>
            </StackLayout>
        </ViewCell>
    </DataTemplate>
</ListView.ItemTemplate>

0 голосов
/ 22 сентября 2018

Я собираюсь ответить на это, сделав два предположения:

  1. Фактический вопрос, который вы задаете: «Как я могу связать свойство IsVisible кнопки со свойствомна моей модели? "
  2. Что ваши привязки для ваших свойств действительно работают.Единственная причина, по которой я поднял этот вопрос, заключается в том, что я не вижу, чтобы INotifyPropertyChanged использовался где-либо еще.

С вышеизложенными допущениями вместо добавления дополнительного свойства к вашей модели только для обработки состояния представленияЯ рекомендую использовать Value Converter для установки свойства IsVisible.

Преобразователь будет выглядеть примерно так:

public class StringToBoolConverter : IValueConverter
{
    public object Convert(
           object value, 
           Type targetType, 
           object parameter, 
           CultureInfo culture)
    {
        return (string)value == "paid";
    }

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

Ваш вид будет выглядеть следующим образом:

<ContentPage.Resources>
    <ResourceDictionary>
        <local:StringToBoolConverter x:Key="stringToBool" />
    </ResourceDictionary>
</ContentPage.Resources>

<!--your code --->

<Button  Text="Abrir" 
         IsVisible="{Binding statusDescr, Converter={StaticResource stringToBool}}"  
         BackgroundColor="#1C97D5" 
         TextColor="White" />

Затем вы можете удалить свойство IsVisible из вашей Payment модели.

Я хотел бы отметить, что если у вас есть какой-либо контроль над API, было бы лучше иметь егоотправить обратно bool, если существует только два состояния, или Enum, если существует более двух состояний.Струны могут сломаться слишком легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...