Xamarin контроль не соблюдает это видимое свойство - PullRequest
0 голосов
/ 26 сентября 2018

Итак, у меня есть наблюдаемая коллекция кнопок, где я пытаюсь привязать IsVisible к одной из кнопок, и кнопка отображается, даже когда я жестко закодировал IsVisible в значение false.

Просмотр:

<c:MobileFocusBasePage.BottomRegionItems>
    <c:CollapsableButtonList ItemsSource="{Binding ActionItems}" HorizontalOptions="CenterAndExpand" WidthRequest="-1"/>
</c:MobileFocusBasePage.BottomRegionItems>

Модель:

public ObservableCollection<View> ActionItems { get; set; } = new ObservableCollection<View>();

ActionItems.Add(new PaddedButton { BindingContext = NewWorkOrderButton, Text = ResString("Portal-WorkOrder"), Style = s, IsVisible = false});

Есть ли причина, по которой IsVisible игнорируется в этом случае?

Заранее благодарен за любую помощь

1 Ответ

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

Лично я предпочитаю подкреплять Публичную собственность полем.

private private ObservableCollection<View> _actionItems;

public ObservableCollection<View> ActionItems 
{
    get
    {
        return this._actionItems;
    }
    set
    {
        this._actionItems = value;        
    }
}

ObservableCollection предоставляет уведомление об изменении пользовательского интерфейса при добавлении / удалении / перемещении объекта в коллекции.Для получения дополнительной информации, пожалуйста, смотрите post .

Проблема, с которой вы, скорее всего, столкнулись, заключается в том, что от вашей модели нет уведомлений об изменениях.Итак, когда свойство IsVisibile обновляется в вашей модели представления, как представление узнает, что оно изменилось?Общепринятым способом уведомления представления является использование интерфейса INotifyPropertyChanged.

Я не знаю конкретной реализации вашего класса представления, но вот пример.

public  class View : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string PropertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(PropertyName));
    }

    private bool _isVisible;
    public bool IsVisible
    {
        get
        {
            return this._isVisible;
        }
        set
        {
            this._isVisible = value;
            this.OnPropertyChanged(IsVisible) <--- The Magic! 
        }
    }
}

Вы должны связать свойство IsVisible в xaml, и всякий раз, когда это свойство обновляется, представление будет следовать его примеру!

Интерфейс INotifyPropertyChanged широко используется, и 90% кода, приведенного ниже, являются шаблонными.Вы можете поместить его в базовый класс или использовать инфраструктуру MVVM, которая предоставляет этот материал.Если вам нужна дополнительная информация о том, как реализовать интерфейс INotifyPropertyChanged, см. post .

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