Xamarin Forms: привязка двух свойств к другому - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть HorizontalListView (от SharpNado), и у меня есть несколько кнопок для перемещения между различными элементами.Я хочу, чтобы эти кнопки были видны только при определенных условиях (они могут быть видны одновременно):

Если текущий индекс списка больше 0, то должна быть видна «предыдущая» кнопка.Если текущий индекс списка ниже, чем самый высокий индекс (количество - 1), я хочу, чтобы кнопка «далее» была видимой.

Я хочу использовать некоторую привязку между представлениями (с конвертерами), чтобы решить эту проблему,Мне удалось связать видимость «предыдущей» кнопки с текущим индексом с помощью конвертера, который проверяет, больше ли индекс равен 0, но я много борюсь с кнопкой «следующий», так как она должна измениться, когда либо текущийindex или количество элементов в списке изменяется.

Я много чего перепробовал с параметрами преобразователя, но не могу связать их.Я также попробовал вариант, в котором конвертер имел привязку, но он даже не собирался.

Этот - это HorizontalListView, который я использую, и на данный момент уже слишком позднослишком переключиться на альтернативу, так как я слишком далек от этого.

На данный момент я действительно не уверен, что делать, и я надеюсь, что кто-то здесь может мне помочь.Заранее спасибо.

РЕДАКТИРОВАТЬ:

Example Control

Это элемент управления, который я пытаюсь построить.

1 Ответ

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

В вашем ViewModel добавьте свойство геттера:

public bool IsLowerThanTheHighestIndex => this.MyIndex < this.MyList.Count - 1;

Затем привяжите видимость кнопки к этому свойству.

Затем внесите изменения, где вам нужнона:

private int _myIndex;
public int MyIndex
{
    get
    {
        return this._myIndex;
    }
    set
    {
        this._myIndex = value;
        OnPropertyChanged(nameof(MyIndex));
        OnPropertyChanged(nameof(IsLowerThanTheHighestIndex));
    }
}

и везде, где вы изменяете MyList, также вносите изменения, например:

this.MyList.Add(...);
OnPropertyChanged(nameof(IsLowerThanTheHighestIndex));

Если вы используете ObservableCollection<T>, вы можете подписаться на CollectionChangedсобытие и вызов OnPropertyChanged(nameof(IsLowerThanTheHighestIndex)); в обратном вызове события (не забудьте отменить подписку на событие в конце)

HIH

...